如何只在java中打开现有文件

时间:2015-08-03 04:51:11

标签: java file

我想知道如何在java中打开文件进行编写,但我只想打开它,如果它已经存在的话。那可能吗?我到处搜索,发现两条建议都不符合我的需求。一个是打开文件追加。问题是,如果文件不存在,它将创建它。第二个是首先使用file.exists()。那当然不是一个有效的解决方案,因为当我调用file.exists()时文件可能存在但在我打开文件时不存在。我想要一些类似于Windows API OpenFile()的东西,我可以在其中传递OPEN_EXISTING标志,这样调用失败就是文件不存在。 java中是否存在类似的内容?

仅编辑问题,因为它被标记为重复。不知道为什么。我认为我对其他答案非常具体,以及为什么它们还不够。

所以我要重申,我想打开一个文件进行写作。如果文件还没有存在,我希望打开失败。

3 个答案:

答案 0 :(得分:4)

如果文件路径是有效目录,则

exists()返回true,即使文件不存在也是如此。您可以使用以下方法解决此问题:

File f = new File(filePathString);

if(f.exists() && !f.isDirectory()) {/*Do whatever*/}

或使用:

File f = new File(filePathString);

if f.isFile() {/*Do whatever*/}

答案 1 :(得分:1)

抓住引发的FileNotFoundException

try (FileInputStream fis = new FileInputStream(file))
{
    // ...
}
catch (FileNotFoundException exc)
{
    // it didn't exist.
}

涉及File.exists()和朋友的解决方案容易受到时间窗问题的影响,因此无法推荐。它们也只是复制操作系统已经要做的事情,但是在错误的时间,所以它们浪费时间和空间。无论如何,你必须处理IOExceptions,所以就这样做。

答案 2 :(得分:-1)

没有类似的东西在Java ....核心库

您应该能够将逻辑包装在一个if语句中,该语句指定使用file.exists()方法。如果您在打开文件之前进行检查,那么如果有人删除了中间的文件,您将非常不走运。检查文件是否存在的方法以及打开文件并锁定它的代码应该在几毫秒内运行..

例如

If (file.exists() {
  //Your Code  goes here.. 
} else {
  System.out.Print("missing file");
}