2014-10-26 84 views
0

我正在使用txt文件,使用类PrintWriter创建它们。这允许我使用println(...)方法在txt文件内部打印一些内容。将文本行添加到文本文件的最佳策略

但现在我需要在我创建的列表末尾添加一些内容。就像这样:

PrintWriter writer = new PrintWriter("File.txt", "UTF-8"); 

writer.println("Hello"); 
writer.println("Josh!"); 

writer.close(); 

的结果是这样的文件:

你好

乔希!

但是如果我想在文本的底部添加新单词怎么办?我更喜欢覆盖内容更新的文件“File.txt”?

你好

乔希!

你好吗?

我在想的东西一样,“好吧,我必须在结尾处加上另一条线,所以读取所有文件,并写入另一个文件(具有相同的名称和内容)在结尾处增加一个新行“,但这似乎太奇怪了,我觉得还有另一种简单的方法来做到这一点。任何其他想法?

+1

http://docs.oracle.com/javase/7/docs/api/java/io /FileOutputStream.html#FileOutputStream%28java.lang.String,%20boolean%29 – 2014-10-26 16:12:53

+1

'PrintWriter'实现'Appendable',因此它有'append()'方法。 – MirMasej 2014-10-26 16:23:54

回答

1

您的怀疑是正确的。

您应该使用try with resources(Java 7+):

try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("File.txt", true)))) { 
    out.println("How are you?"); 
}catch (IOException e) { 
    //exception handling left as an exercise for the reader 
} 

的第二个参数的FileWriter constructor会告诉它附加到文件(而不是清除文件)。对于昂贵的作家(即FileWriter),建议使用BufferedWriter,使用PrintWriter可以访问您可能从System.out中使用的println语法。但是BufferedWriter和PrintWriter包装并不是绝对必要的。

此外,您还可以在每次运行时追加到文件,而不是替换整个文件。最后,尝试使用资源意味着您不必拨打.close(),这是为您完成的! Grabbed from here

1

你可以简单地用一个FileWriter相反,它具有附加模式,你可以启用:

FileWriter writer = new FileWriter("File.txt"); 

    writer.write("Hello\n"); 

    writer.write("Josh!\n"); 

    writer.close(); 

    writer = new FileWriter("File.txt", true); 

    writer.append("Great!"); 

    writer.close();