格式化程序不写入文件

时间:2013-11-17 20:53:04

标签: java

我正在尝试将一些字符串写入名为“file.txt”的文件中,但是当我运行该程序时,没有写入任何内容。如果该文件不存在,它将创建该文件,但什么都不写。

public class CreateTextFile 
{
    private Formatter output;

    public void openFile(String filename)
    {
        {
            try
            {
                output = new Formatter(filename);
            }
            catch(FileNotFoundException fileNotFoundException)
            {
                System.err.println("Error");
            }
        }
    }

    public void addText()
    {
        Random randomnumber = new Random();
        int lines = 1 + randomnumber.nextInt(10);

        String text[] = new String[lines];

        output.format("%s","Hello");

        /*for (int i = 0; i < lines; i++)
        {
            Textline tokens = new Textline("Hello",1);
            output.format("%s",tokens.toString());
        }*/
    }
}

2 个答案:

答案 0 :(得分:2)

所有格式化完成后关闭Formatter

output.close();

答案 1 :(得分:1)

java.util.Formatter的输出不会立即写入,而是首先在内存中缓冲。请注意您在http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#Formatter(java.io.File)

使用的构造函数的file参数的文档
  

用作此格式化程序目标的文件。如果该文件存在,那么它将被截断为零大小;否则,将创建一个新文件。输出将被写入文件并被缓冲。

由于Formatter类同时实现FlushableCloseable,因此接口具有flush()close()方法。要将缓冲数据刷新到磁盘,请调用flush(),并立即写入等待数据。然后,一旦您使用Formatter调用close(),将会写出剩余的缓冲数据。

因此,例如,在格式化每一位数据之后,您可以拥有这样的代码:

output.format("%s","Hello");
output.flush();

或者,为确保即使存在异常也要写出所有内容,请使用 finally 块来调用close()方法:

Formatter output = new Formatter("file.txt");
try {
    // your code
} finally {
    output.close();
}

如果您使用的是Java 7.0,那么因为Formatter也实现了AutoCloseable,可以使用 try-with-resources 块来代替 finally block:

try (Formatter output = new Formatter("file.txt") {
    // your code
}

当块完成时,这会自动调用close()