检查文件是否存在 Java

3

我想创建文本文件,但如果文件已经存在,则不应创建新文件,而应将文本附加到现有文件的内容(末尾)。我该如何在Java中实现?

每隔一秒钟,我从输入流中读取数据,当我停止读取并再次开始读取数据时,此时应将其写入同一文件(如果文件已存在)。

我需要检查条件吗?

if(file.exists){

} else{
   new File();
}

我需要做什么?


你的问题不太清楚,但我猜你想在文件已经存在的情况下追加内容,对吗? - Kirtan
是的,如果文件已经存在,想要将内容追加到文件中。 - suhas
3个回答

12
您可以使用以下代码将内容追加到已存在的文件中 -
try {
    BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
    out.write("data");
    out.close();
} catch (IOException e) { }

如果FileWriter构造函数的第二个参数为true,则字节将被写入文件的末尾而不是开头。
引用Stephen的评论:
“...将true作为第2个参数传递会在文件不存在时创建文件,并在文件存在时打开文件以进行追加。”

2
准确来说,将true作为第二个参数传递会导致文件在不存在时被创建,并在存在时以追加方式打开。 - Stephen C
1
这是解决此问题的最佳方法。所有其他的检查-然后-创建方法都可能由于非原子文件操作而失败。在大多数系统上,追加-创建操作是原子的。FileOutputStream类直接设置了一个以追加模式的FileDescriptor,这是正确的操作。 - brianegge

10
我需要检查条件if(file.exists){ }else{ new File(); }吗?
不需要这样做,可以参考其他答案中的解决方案。实际上,这样做是一个坏主意,因为它会创建潜在的竞争条件,可能会导致应用程序偶尔崩溃...或者破坏文件!假设操作系统在file.exists()返回false之后立即抢占了您的应用程序,并将控制权交给其他应用程序。然后假设其他应用程序创建了该文件。现在当操作系统恢复您的应用程序时,它不会意识到该文件已经被创建,并尝试自己创建它。根据情况,这可能会破坏现有的文件,或者由于文件锁定冲突而导致此应用程序抛出IOException。
顺便说一句,new File()并不会实际创建任何文件系统对象。只有当您打开文件时(例如通过调用new FileOutputStream(file);),才会发生这种情况。

1
如果您希望在已存在的文件中追加内容,则使用exists()检查其是否存在是没有必要的。 您只需要创建一个设置了追加标志的FileWriter即可,例如:

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("foo.txt", true)));
pw.println("Hello, World");
pw.close();

如果文件不存在,则创建该文件,否则将内容追加到文件末尾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接