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

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

SO上唯一类似的问题处理写入文件,因此使用FileWriter来回答,这在这里显然不适用。

如果可能的话,我宁愿一个真正的API调用返回true / false,而不是一些“调用API来打开一个文件,并赶上时,它会抛出一个exception,你检查文本中没有文件”,但我可以住在后者。

使用java.io.File

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

我会build议使用isFile()而不是exists() 。 大多数时候你正在检查path是否指向一个文件,而不仅仅是它存在。 请记住,如果path指向一个目录,则exists()将返回true。

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

new File("C:/").exists()将返回true,但不允许您打开并从文件中读取它。

通过在Java SE 7中使用nio,

 import java.nio.file.*; Path path = Paths.get(filePathString); if (Files.exists(path)) { // file exist } if (Files.notExists(path)) { // file is not exist } 

如果两者都存在且不存在,则返回false,则无法validation文件的存在。 (也许没有访问权限到这个path)

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

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

请检查这个Java SE 7教程 。

 File f = new File(filePathString); 

这不会创build一个物理文件。 只需创build类File的对象。 要物理创build一个文件,你必须明确地创build它:

 f.createNewFile(); 

所以f.exists()可以用来检查这个文件是否存在。

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

使用Java 8:

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

首先打在谷歌上的“java文件存在”:

 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 ")); } } 

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

别。 只要赶上FileNotFoundException. 文件系统必须testing文件是否存在。 这样做是没有意义的,有两个原因,例如:

  • 双倍的代码
  • 时间窗口的问题,即文件可能存在,当你testing,但不是当你打开, 反之亦然,
  • 事实上,正如这个问题的存在所表明的那样,你可能会做出错误的testing,得到错误的答案。

不要试图猜测系统。 它知道。 而不要试图预测未来。 一般来说,testing任何资源是否可用的最好方法就是尝试使用它。

对我来说,肖恩·AO·哈尼(Sean AO Harney)接受的答案和由Cort3z得出的评论相结合似乎是最好的解决scheme。

使用以下片段:

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

希望这可以帮助别人。

有多种方法来实现这一点。

  1. File("/path/to/file").exists(); 如果只是为了生存。 它可能是文件或目录。

  2. 文件f =新build文件(“/ path / to / file”); if(f.exists()&& f.isFile()){}

    检查文件

  3. 文件f =新build文件(“/ path / to / file”); if(f.exists()&& f.isDirectory()){}

    检查目录。

  4. Java 7的方式。

Path path = Paths.get("/path/to/file"); Files.exists(path) – 存在Files.isDirectory(path) – 是目录Files.isRegularFile(path) – 常规文件Files.isSymbolicLink(path) – 符号链接

不要使用带String的File构造函数。
这可能不行!
而不是这个使用URI:

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

如果你想检查目录dirFile

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

并检查check结果

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

会做的伎俩

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

 File f = new File("c:\\test.txt"); if(f.exists()){ System.out.println("File existed"); }else{ System.out.println("File not found!"); } 

我知道我在这个线程有点晚了。 不过,这里是我的答案,自Java 7及以后有效。

以下片段

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

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

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

从Java Oracle文档

您可以使用下面的代码来检查:

 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; } } }