【问题标题】:check file exists java检查文件是否存在java
【发布时间】:2010-11-17 06:11:46
【问题描述】:

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

当我停止读取时,我每隔一秒从输入流读取数据,然后我再次开始读取数据,如果文件已经存在,我应该写入同一个文件

我需要检查条件吗:

if(file.exists){

} else{
   new File();
}

我必须做什么?

【问题讨论】:

  • 你的问题不清楚,但我猜你想附加到一个已经存在的文件,对吧?
  • 是的,如果文件已经存在,想追加到文件中

标签: java file core


【解决方案1】:

您可以使用以下代码追加到已经存在的文件-

try {
    BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
    out.write("data");
    out.close();
} catch (IOException e) { }

如果FileWriter's 构造函数中的第二个参数是true,那么字节将被写入文件的末尾而不是开头。

引用斯蒂芬的评论:

...将true 作为第二个传递 参数导致文件被创建 如果它不存在并被打开 如果存在则追加。

【讨论】:

  • 确切地说,将true 作为第二个参数传递会导致文件不存在时创建,如果文件存在则打开以进行追加。
  • 这是解决此问题的最佳方法。由于非原子文件操作,所有其他检查然后创建方法都可能失败。在大多数系统上,追加创建操作是原子的。 FileOutputStream类直接在追加模式下设置了一个FileDescriptor,这才是正确的操作。
【解决方案2】:

如果您希望在文件已经存在的情况下附加到文件,则根本不需要使用exists() 检查它的存在。您只需要创建一个 FileWriter 并将 append 标志设置为 true;例如

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

如果文件不存在,这将创建文件,否则附加到文件末尾。

【讨论】:

    【解决方案3】:

    我必须检查条件吗 if(file.exists){ }else{ new File(); }

    不,您不必这样做:请参阅解决方案的其他答案。

    实际上,这样做是一个坏主意,因为它会产生潜在的竞争条件,这可能会使您的应用程序偶尔死掉......或破坏一个文件!

    假设操作系统在file.exists() 调用返回false 后立即抢占了您的应用程序,并将控制权交给了其他应用程序。然后假设另一个应用程序创建了该文件。现在,当操作系统恢复您的应用程序时,它不会意识到文件已创建,并尝试自己创建它。根据具体情况,这可能会破坏现有文件,或者可能导致此应用程序由于文件锁定冲突而引发 IOException。

    顺便说一句,new File() 实际上不会导致创建任何文件系统对象。这只发生在您“打开”文件时;例如致电new FileOutputStream(file);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多