我有一个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");
。我知道为什么,这是因为每次调用该方法时我都会创建一个新文件。.但是我真的不知道解决方法!
答案 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
}
}
}
close()
调用,并且将正常关闭资源,而不管是正常完成块还是异常完成块。FIRST_CALL
,所以我觉得设置它很简单,无需额外检查。