打印到txt文件的方法

时间:2018-06-25 12:14:03

标签: java logging

我有一个Java程序,上面有我想登录到txt文件的值。我是该语言的新手,发现它不是那么简单。

我创建了一个Logger类:

public static void loggerMain(String content) {    
    try {
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", true)));
        out.println(content);
        out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
}

然后我在另一个类中调用该方法:

Logger.loggerMain("testing");

它将记录字符串,但是如果我再次运行脚本,它将把相同的字符串附加到新行。但是我不希望每次调用脚本时都附加相同的println。我想覆盖该文件。我该怎么办?

如果将FileWriter自变量更改为False,则文件将仅记录对方法的最新调用。例如:

Logger.loggerMain("testing1");
Logger.loggerMain("testing2");

将仅记录Logger.loggerMain("testing2");。我知道为什么,这是因为每次调用该方法时我都会创建一个新文件。.但是我真的不知道解决方法!

2 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,那么您希望每次执行程序时都清除日志。您可以在Logger类中添加以下内容:

class Logger {
    private static boolean FIRST_CALL = true;

    public static void loggerMain(String content) {    
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", !FIRST_CALL)));

            if(FIRST_CALL){
                FIRST_CALL = false;
            }
            out.println(content);
            out.close();
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
    }
}

使用变量FIRST_CALL,我们可以跟踪记录器是否已在当前脚本上下文中首次执行。如果是这样,我们通过将false!FIRST_CALL)传递到FileWriter

中来覆盖文件

答案 1 :(得分:1)

只需重复other answer

class Logger {
    private static boolean FIRST_CALL = true;

    public static void loggerMain(String content) {    
        try (
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("debug.txt", !FIRST_CALL)))) {
            FIRST_CALL = false;
            out.println(content);
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
    }
}
  1. try-with-resources将为您省去一个明确的close()调用,并且将正常关闭资源,而不管是正常完成块还是异常完成块。
  2. 这是主观的:因为代码无论如何都会碰到FIRST_CALL,所以我觉得设置它很简单,无需额外检查。