Java如何检查文件是否存在并打开它?

4
如何检查文件是否存在并打开它?
if(file is found)
{
    FileInputStream file = new FileInputStream("file");
}

使用 File#exists - Sahil Muthoo
可能是重复的问题:如何在Windows上使用Java检查文件是否存在? - anubhava
3个回答

20

File.isFile方法可以告诉你一个文件是否存在且不是目录。

请注意,该文件可能会在你检查与尝试打开之间被删除,并且该方法不会检查当前用户是否具有读取权限。

File f = new File("file");
if (f.isFile() && f.canRead()) {
  try {
    // Open the stream.
    FileInputStream in = new FileInputStream(f);
    // To read chars from it, use new InputStreamReader
    // and specify the encoding.
    try {
      // Do something with in.
    } finally {
      in.close();
    }
  } catch (IOException ex) {
    // Appropriate error handling here.
  }
}

你关闭流的方式不正确。in.close() 应该在第一个 try 的 finally 中。我给你一个负分来提醒。 - Charles Wu
@Charles Wu,在处理任何异常之前关闭in不会有任何损失。此外,in变量不能在IOException处理程序之外初始化,因为FileInputStream构造函数会抛出IOException处理程序,所以如果我将finally移到外面,我就必须做一些愚蠢的技巧,比如将in初始化为null并在finally中检查它,这只会使事情更加复杂,即使我确实想忍受那种不必要的复杂性,我也需要在整个过程中使用try,因为in.close()可能会抛出一个IOException - Mike Samuel
抱歉误解你的代码。你在内部try语句中使用的FileInputStream实例可以关闭 in。但是,in.close() 的传播异常可能会覆盖 in 的另一个方法也抛出异常时的异常。 - Charles Wu
@CharlesWu,没错。如果您想以不同于读写失败的IO异常处理关闭失败的IO异常,则应在finally块中嵌套try/catch。 - Mike Samuel

7

您需要先创建一个文件对象,然后使用它的exists()方法进行检查。该文件对象可以传递到FileInputStream构造函数中。

File file = new File("file");    
if (file.exists()) {
    FileInputStream fileInputStream = new FileInputStream(file);
}

1

您可以在文档中找到exists方法:

File file = new File(yourPath);
if(file.exists())
    FileInputStream file = new FileInputStream(file);

1
可能是因为变量名相同 :) - Nauman Rafique

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