Java FileOutputStream字符串编写

问题描述 投票:4回答:3

我在使用Java文件时遇到了问题。它旨在将测试文件中的每一行写为日志。不幸的是,每次我调用它都会覆盖同一行。

如果有人能帮助我,我将永远感激不已,因为这一直使我难以为继!

下面的代码。

public abstract class Log {

    protected static String DefaultLogFileLocation = "c:\\LOG.txt";

    public static void ToFile(String pInputString) {
        FileOutputStream pOUTPUT;
        PrintStream pPRINT;
        try
        {
            pOUTPUT = new FileOutputStream(DefaultLogFileLocation);
            pPRINT = new PrintStream(pOUTPUT);
            pPRINT.println (pInputString + "\n");
            pPRINT.close();
        }
        catch (Exception e)
        {
            System.err.println ("Error writing to file");
        }
    }
}
java string file-io fileoutputstream
3个回答
7
投票

您忘记传递构造函数参数来指定您需要将数据追加到文件中。

pOUTPUT = new FileOutputStream(DefaultLogFileLocation, true);

而且,为什么不使用某些Java Logging Framework?例如。 java.util.logginglog4j

要写入文件的log4j配置示例:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="C:\\LOG.TXT" />
    <param name="datePattern" value="'.'yyyy-MM" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n"/> 
    </layout>
  </appender> 
  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="console" /> 
  </root>


2
投票

我建议使用具有FileOutputStream constructor参数的FileOutputStream

通常,熟悉Javadocs,他们可以比这里的人更快地回答诸如此类的简单问题。


1
投票

尝试使用append。参见pOUTPUT = new FileOutputStream(DefaultLogFileLocation, true);

© www.soinside.com 2019 - 2024. All rights reserved.