2

该程序要求输出文件名,似乎运行良好。直到我尝试使用文本编辑器或终端打开输出文件。然后我在该文件中看不到任何内容,只是空白文件。该程序创建文本文件,但文件为空。提前感谢您的帮助。

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();
  }
}
4

3 回答 3

5

用于out.flush()将内容刷新到文件中。

或者使用PrintWriter的自动刷新构造函数(可能不是性能最好的选项),但无论如何都是一个选项

public PrintWriter(Writer out,boolean autoFlush)

autoFlush - 一个布尔值;if trueprintlnprintf或 format 方法将刷新输出缓冲区

于 2013-03-09T08:10:24.310 回答
2

你还没有关闭你的PrintWriter对象。您需要关闭流以将其反映在控制台或文件上(取决于您的 outputStream)

out.close();

即使你有

PrintWriter out = new PrintWriter(System.out);
...
...
...
out.close();

然后您需要关闭它,以便将输出写入控制台。
因此,在您的情况下,关闭流将写入文件。

于 2013-03-09T08:57:00.363 回答
1

您需要刷新PrintWriter要从内存缓冲区写入文件的内容。

out.flush();

在任何情况下,您还应该始终关闭(释放)资源,否则锁定可以或将保留在文件上,具体取决于操作系统。并且close()还会自动刷新更改。

于 2013-03-09T08:08:37.703 回答