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