如何检查Java中是否存在文件?

How do I check if a file exists in Java?

如何打开文件以在Java中读取之前,是否检查文件是否存在?(相当于Perl的-e $filename)。

关于so的唯一类似问题是写文件,因此用filewriter回答,显然在这里不适用。

如果可能的话,我更喜欢一个返回true/false的真正的API调用,而不是一些"调用API打开一个文件,并在它抛出异常时捕获,您检查文本中是否有"no file",但我可以接受后者。


使用java.io.File

1
2
3
4
File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) {
    // do something
}


我建议使用isFile()而不是exists()。大多数情况下,您要检查路径是否指向文件,而不仅仅是文件是否存在。记住,如果您的路径指向一个目录,那么exists()将返回true。

1
new File("path/to/file.txt").isFile();

new File("C:/").exists()将返回true,但不允许您以文件的形式打开和读取它。


在Java SE 7中使用NIO,

1
2
3
4
5
6
7
8
9
10
11
import java.nio.file.*;

Path path = Paths.get(filePathString);

if (Files.exists(path)) {
  // file exist
}

if (Files.notExists(path)) {
  // file is not exist
}

如果exists和notexists都返回false,则无法验证文件的存在。(可能无法访问此路径)

您可以检查路径是目录还是常规文件。

1
2
3
4
5
6
7
if (Files.isDirectory(path)) {
  // path is directory
}

if (Files.isRegularFile(path)) {
  // path is regular file
}

请检查这个Java SE 7教程。


使用Java 8:

1
2
3
if(Files.exists(Paths.get(filePathString))) {
    // do something
}


1
File f = new File(filePathString);

这不会创建物理文件。只创建类文件的对象。要实际创建文件,必须显式创建:

1
f.createNewFile();

因此,可以使用f.exists()来检查该文件是否存在。


1
f.isFile() && f.canRead()


实现这一点有多种方法。

  • 为了生存。它可以是文件或目录。

    1
    new File("/path/to/file").exists();
  • 检查文件

    1
    2
    File f = new File("/path/to/file");
      if(f.exists() && f.isFile()) {}
  • 检查目录。

    1
    2
    File f = new File("/path/to/file");
      if(f.exists() && f.isDirectory()) {}
  • Java 7方式。

    1
    2
    3
    4
    5
    Path path = Paths.get("/path/to/file");
    Files.exists(path)  // Existence
    Files.isDirectory(path)  // is Directory
    Files.isRegularFile(path)  // Regular file
    Files.isSymbolicLink(path)  // Symbolic Link

  • 您可以使用以下命令:File.exists()


    谷歌上"Java文件存在"的第一次命中:

    1
    2
    3
    4
    5
    6
    7
    8
    import java.io.*;

    public class FileTest {
        public static void main(String args[]) {
            File f = new File(args[0]);
            System.out.println(f + (f.exists()?" is found" :" is missing"));
        }
    }


    不要。只要抓住FileNotFoundException.文件系统就必须测试文件是否存在。这两次都没有意义,有几个理由不这么做,例如:

    • 加倍代码
    • 定时窗口问题,即文件可能在测试时存在,但在打开时不存在,反之亦然,以及
    • 事实上,正如这个问题的存在所表明的那样,你可能做了错误的测试,得到了错误的答案。

    不要试图对系统进行二次猜测。它知道。不要试图预测未来。一般来说,测试任何资源是否可用的最佳方法就是尝试使用它。


    对我来说,把肖恩A.O.哈尼接受的答案和Cort3z的评论结合起来似乎是最好的解决方案。

    使用了以下代码段:

    1
    2
    3
    4
    File f = new File(filePathString);
    if(f.exists() && f.isFile()) {
        //do something ...
    }

    希望这能帮助别人。


    我知道我有点晚了。不过,这是我的答案,自Java 7和UP生效。

    以下代码段

    1
    2
    3
    if(Files.isRegularFile(Paths.get(pathToFile))) {
        // do something
    }

    是完全满足的,因为如果文件不存在,方法isRegularFile返回false。因此,不需要检查Files.exists(...)是否存在。

    请注意,其他参数是指示如何处理链接的选项。默认情况下,符号链接后面跟着。

    从Java Oracle文档


    同样值得熟悉commons fileutils https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/fileutils.html这有额外的文件管理方法,而且通常比JDK更好。


    例如,如果您有一个文件目录,并且想要检查它是否存在

    1
    2
    3
    File tmpDir = new File("/var/tmp");

    boolean exists = tmpDir.exists();

    如果文件不存在,exists将返回false

    来源:https://alvinalexander.com/java/java-file-exists-directory-exists


    具有良好编码实践并涵盖所有案例的简单示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     private static void fetchIndexSafely(String url) throws FileAlreadyExistsException {
            File f = new File(Constants.RFC_INDEX_LOCAL_NAME);
            if (f.exists()) {
                throw new FileAlreadyExistsException(f.getAbsolutePath());
            } else {
                try {
                    URL u = new URL(url);
                    FileUtils.copyURLToFile(u, f);
                } catch (MalformedURLException ex) {
                    Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

    参考和更多示例

    https://zgrepcode.com/examples/java/java/nio/file/filealreadyexistsException-implements


    1
    new File("/path/to/file").exists();

    会成功的


    不要将文件构造函数与字符串一起使用。这可能不起作用!而不是使用此URI:

    1
    2
    3
    4
    File f = new File(new URI("file:///"+filePathString.replace('\', '/')));
    if(f.exists() && !f.isDirectory()) {
        // to do
    }


    File.exists()要检查文件是否存在,它将返回一个布尔值来指示检查操作状态;如果文件存在,则返回true;如果文件不存在,则返回false。

    1
    2
    3
    4
    5
    6
    7
    File f = new File("c:\\test.txt");

    if(f.exists()){
        System.out.println("File existed");
    }else{
        System.out.println("File not found!");
    }

    如果您想在目录中检查dir中的File

    1
    2
    String directoryPath = dir.getAbsolutePath()
    boolean check = new File(new File(directoryPath), aFile.getName()).exists();

    检查check结果


    您可以使用以下代码进行检查:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.io.File;
    class Test{
        public static void main(String[] args){
            File f = new File(args[0]); //file name will be entered by user at runtime
            System.out.println(f.exists()); //will print"true" if the file name given by user exists, false otherwise

            if(f.exists())
            {
                 //executable code;
            }
        }
    }

    你可以这样做

    1
    2
    3
    4
    5
    6
    import java.nio.file.Paths;

    String file ="myfile.sss";
    if(Paths.get(file).toFile().isFile()){
        //...do somethinh
    }

    若要检查文件是否存在,只需导入java.

    1
    2
    3
    4
    5
    6
    7
    File f = new File("C:\\File Path");

    if(f.exists()){
            System.out.println("Exists");        //if file exists
    }else{
            System.out.println("Doesn't exist");         //if file doesn't exist
    }

    来源:http://newsdivariotipo.altervista.org/java-come-controllare-se-un-file-esiste/