我想要创建文本文件,但如果文件已经存在,则不应创建新文件,而应将文本附加到现有文件的内容(最后)。我怎么能用Java做到这一点?
每一秒我在读取数据时从输入流中读取数据并且当我再次开始读取数据时,如果文件已经存在,我应该写入相同的文件
我必须检查条件:
if(file.exists){
} else{
new File();
}
我必须做什么?
答案 0 :(得分:12)
您可以使用以下代码附加到已存在的文件 -
try {
BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
out.write("data");
out.close();
} catch (IOException e) { }
如果FileWriter's构造函数中的第二个参数是true
,则字节将写入文件的末尾而不是开头。
引用斯蒂芬的评论:
...将
true
作为第2个传递 参数导致创建文件 如果它不存在并被打开 如果确实存在则附加。
答案 1 :(得分:10)
我必须检查病情
if(file.exists){ }else{ new File(); }
不,您不必这样做:请参阅解决方案的其他答案。
实际上,做这样的事情会是一个坏主意,因为它会产生潜在的竞争条件,可能会使你的应用程序偶尔死...或者破坏者一个文件!
假设操作系统在file.exists()
调用返回false
后立即抢占您的应用程序,并控制其他应用程序。然后假设其他应用程序创建了该文件。现在,当您的应用程序被操作系统恢复时,它将不会意识到该文件已经创建,并尝试自己创建它。根据具体情况,这可能会破坏现有文件,或者由于文件锁定冲突,可能会导致此应用程序抛出IOException。
顺便说一下,new File()
实际上并不会导致创建任何文件系统对象。只有在你打开文件时才会发生这种情况;例如致电new FileOutputStream(file);
答案 2 :(得分:1)
如果您希望附加到文件(如果已存在),则无需使用exists()
检查其是否存在。您只需创建FileWriter
并将append标志设置为true; e.g。
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("foo.txt", true)));
pw.println("Hello, World");
pw.close();
如果文件不存在,则会创建该文件,否则附加到文件的末尾。