附加到文件

时间:2013-04-30 00:00:40

标签: java io append fileoutputstream printwriter

我正在尝试编写一个java程序,将系统的当前日期和时间附加到日志文件(在我的计算机启动时由批处理文件运行)。这是我的代码。

public class LogWriter {

    public static void main(String[] args) {

        /* open the write file */
        FileOutputStream f=null;
        PrintWriter w=null;

        try {
            f=new FileOutputStream("log.txt");
            w=new PrintWriter(f, true);
        } catch (Exception e) {
            System.out.println("Can't write file");
        }

        /* replace this with your own username */
        String user="kumar116";
        w.append(user+"\t");

        /* c/p http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/ */
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();
        w.append(dateFormat.format(date)+'\n');

        /* close the write file*/
        if(w!=null) {
            w.close();
        }

    }

}

问题是,它没有追加:)文件。有人可以指出这里有什么问题吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

PrintWriter#append不会将数据附加到文件中。相反,它使用write执行直接Writer。您需要使用append标志声明FileOutputStream构造函数:

f = new FileOutputStream("log.txt", true);
w = new PrintWriter(f); // autoflush not required provided close is called

仍然可以使用append方法,或者println更方便,不需要添加换行符:

w.println(dateFormat.format(date));

如果调用close,则不需要PrintWriter构造函数中的autoflush标志。 close应出现在finally块中。

答案 1 :(得分:0)

PrintWriter构造函数不会使用参数来决定是否附加到文件。它控制自动清除。

创建FileOutputStream(可以控制是否附加到文件),然后将该流包装在PrintWriter中。

try {
    f=new FileOutputStream("log.txt", true);
    w=new PrintWriter(f, true);  // This true doesn't control whether to append
}