我有以下代码:
PrintWriter logput = new PrintWriter("path\\log.txt", "UTF-8");
for (String symb : symbolList) {
System.out.println(symb);
logput.println(symb);
}
logput.close();
for循环运行了几个小时,所以我最终必须停止程序。当我检查log.txt时它是空的,而System.out每次迭代都会打印symb
值而没有问题。这意味着println方法在有效地将文本写入文件之前等待close方法调用。
这对我来说非常糟糕,有没有其他方法用java编写文本到文件中没有这个问题?
编辑:flush()方法完成工作,感谢评论。另外一个人可以告诉我如何阻止PrintWriter logput = new PrintWriter("path\\log.txt", "UTF-8");
删除log.txt中预先存在的内容吗?
答案 0 :(得分:3)
如何不覆盖上一个文件
如果使用OutputStream
构造函数而不是File构造函数,则可以创建自己的FileOutputStream
实例,该实例使用构造函数来告诉输出流而不是覆盖。 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html
如何自动刷新?
PrintWriter
有一个构造函数,它需要一个额外的布尔值来设置autoflush
将这些放在一起:
PrintWriter logput = new PrintWriter(new FileOutputStream("path\\log.txt", true), true);
for (String symb : symbolList) {
System.out.println(symb);
logput.println(symb);
}
logput.close();
如果你需要使用UTF-8字符集,你必须自己创建OutputStreamWriter
//boolean here is for append
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("path\\log.txt", true), "UTF-8"))
//boolean here is for autoflush
PrintWriter logput = new PrintWriter(writer, true);
for (String symb : symbolList) {
System.out.println(symb);
logput.println(symb);
}
logput.close();
答案 1 :(得分:1)
FileOutputStream outputStream = new FileOutputStream("path\\log.txt", true);
PrintWriter logput = new PrintWriter(outputStream, true);
for (String symb : symbolList) {
System.out.println(symb);
logput.println(symb);
}
logput.close();
它会起作用吗?