此程序要求输出文件名,似乎工作正常。直到我尝试使用文本编辑器或终端打开输出文件。然后我在那个文件中看不到任何空白文件。此程序创建文本文件但文件为空。 感谢您的帮助。
import java.util.*;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Writes a Memo file.
*
*/
public class MemoPadCreator {
public static void main(String args[]) {
Scanner console = new Scanner(System.in);
System.out.print("Enter Output file name: ");
String filename = console.nextLine();
try {
PrintWriter out = new PrintWriter(filename);
boolean done = false;
while (!done) {
System.out.println("Memo topic (enter -1 to end):");
String topic = console.nextLine();
// Once -1 is entered, memo's will no longer be created.
if (topic.equals("-1")) {
done = true;
console.close();
}
else {
System.out.println("Memo text:");
String message = console.nextLine();
/* Create the new date object and obtain a dateStamp */
Date now = new Date();
String dateStamp = now.toString();
out.println(topic + "\n" + dateStamp + "\n" + message);
}
}
/* Close the output file */
} catch (IOException exception) {
System.out.println("Error processing the file:" + exception);
}console.close();
}
}
答案 0 :(得分:5)
使用out.flush()
将内容刷新到文件中。
或者使用PrintWriter的自动刷新构造函数(可能不是效果最好的选项),但无论如何都是一个选项
public PrintWriter(Writer out,boolean autoFlush)
autoFlush - 布尔值; if
true
,println
,printf
或格式方法 将刷新输出缓冲区
答案 1 :(得分:2)
您尚未关闭PrintWriter
对象。您需要关闭流以在控制台或文件上反映它(取决于您的outputStream)
out.close();
即使你有
PrintWriter out = new PrintWriter(System.out);
...
...
...
out.close();
然后你需要关闭它,以便输出写在控制台上 因此,在您关闭的情况下,关闭流将写入文件。
答案 2 :(得分:1)
您需要从内存缓冲区中清除要写入文件的内容的PrintWriter
。
out.flush();
在任何情况下,您还应始终关闭(释放)资源,否则锁定可以或将保留在文件中,具体取决于操作系统。 close()
也会自动刷新更改。