我正在尝试将一些字符串写入名为“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());
}*/
}
}
答案 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
类同时实现Flushable
和Closeable
,因此接口具有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()
。