IT-Swarm.Net

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

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

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

如果可能的话,我更喜欢真正的API调用返回true/false,而不是某些“调用API来打开文件并在它抛出异常时捕获,你在文本中检查'没有文件'”,但我可以忍受后者。

760
DVK

使用 Java.io.File

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { 
    // do something
}
1237
Sean A.O. Harney

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

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

new File("C:/").exists()将返回true但不允许您打开并将其作为文件读取。

398
Chris Dail

通过在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
}

如果两者都存在且notExists返回false,则无法验证文件是否存在。 (也许没有访问权限)

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

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

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

请检查 Java SE 7教程

129
Wonil

使用Java 8:

if(Files.exists(Paths.get(filePathString))) { 
    // do something
}
39
Wendel
File f = new File(filePathString); 

这不会创建物理文件。将只创建类File的对象。要物理创建文件,您必须显式创建它:

f.createNewFile();

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

27
rizwan
f.isFile() && f.canRead()
24
jhumble

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

14
Francis Upton

在谷歌上首次出现“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 "));
    }
}
14
just somebody

有多种方法可以实现这一目标。 

  1. 只是为了存在。它可以是文件或目录。 

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

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

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

    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
    
13
Raghu K Nair

别。只需捕获FileNotFoundException.文件系统必须测试文件是否仍然存在。完成所有这两次没有意义,有几个原因没有,例如:

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

不要试图猜测系统。它知道。并且不要试图预测未来。一般来说,测试 any resource是否可用的最佳方法就是尝试使用它。

9
user207421

对我来说,Sean A.O接受的答案的组合。 Harney和Cort3z的评论似乎是最好的解决方案。

使用以下代码段:

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

希望这可以帮助某人。

8
X-Fate

熟悉Commons FileUtils https://commons.Apache.org/proper/commons-io/javadocs/api-2.5/org/Apache/commons/io/FileUtils.html [.____。这有其他管理文件的方法,通常比JDK更好。

4
peter.murray.rust

我知道我在这个帖子中有点晚了。但是,这是我的答案,自Java 7及以后有效。

以下代码段

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

非常令人满意,因为如果文件不存在,方法isRegularFile会返回false。因此,无需检查Files.exists(...)

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

来自Java Oracle文档

4
avi.elkharrat

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

File tmpDir = new File("/var/tmp");

boolean exists = tmpDir.exists();

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

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

3
ID127898

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

 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-implementations

2
Amandeep Singh

如果要在目录File中检查dir

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

并检查check结果

1
user3618182

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

File f = new File("c:\\test.txt");

if(f.exists()){
    System.out.println("File existed");
}else{
    System.out.println("File not found!");
}
1
KIBOU Hassan
new File("/path/to/file").exists(); 

会做的

1
user4833142

不要将File构造函数与String一起使用。
这可能不起作用! 
而不是这个使用URI:

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

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

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

你可以这样做

import Java.nio.file.Paths;

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

设计这些方法有特定目的。我们不能说使用任何人检查文件是否存在。

  1. isFile():测试此抽象路径名表示的 file 是否为普通文件。
  2. exists():测试此抽象路径名所表示的 file或directory 是否存在。 docs.Oracle.com
0
Atul Jain