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

时间:2009-11-29 20:32:39

标签: java file-io io

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

编写文件的唯一similar question on SO处理因此使用FileWriter回答,这显然不适用于此。

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

23 个答案:

答案 0 :(得分:1264)

使用java.io.File

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

答案 1 :(得分:404)

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

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

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

答案 2 :(得分:129)

在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 tutorial

答案 3 :(得分:40)

使用Java 8:

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

答案 4 :(得分:27)

File f = new File(filePathString); 

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

f.createNewFile();

因此f.exists()可用于检查此类文件是否存在。

答案 5 :(得分:24)

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

答案 6 :(得分:16)

There are multiple ways to achieve this.

  1. In case of just for existence. It could be file or a directory.

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

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isFile()) {}
    
  3. Check for Directory.

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

    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
    

答案 7 :(得分:15)

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

答案 8 :(得分:14)

首先在google上找到“java file exists”:

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

答案 9 :(得分:9)

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

  • 加倍代码
  • 时间窗口问题,即测试时文件可能存在但打开时不存在,或反之,
  • 事实是,正如这个问题的存在所示,你可能会做错误的测试并得到错误的答案。

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

答案 10 :(得分:8)

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

使用以下代码段:

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

希望这可以帮助某人。

答案 11 :(得分:4)

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

答案 12 :(得分:4)

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

以下代码段

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

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

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

From Java Oracle documentation

答案 13 :(得分:3)

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

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

boolean exists = tmpDir.exists();
如果文件不存在,

exists将返回false

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

答案 14 :(得分:2)

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

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

参考和更多示例,

this answer

答案 15 :(得分:1)

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

会做的伎俩

答案 16 :(得分:1)

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

答案 17 :(得分:1)

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

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

答案 18 :(得分:1)

如果要检查目录File

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

并检查check结果

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

您可以通过这种方式实现

import java.nio.file.Paths;

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

答案 21 :(得分:0)

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

  1. isFile():测试此抽象路径名表示的文件是否为普通文件。
  2. exists():测试此抽象路径名表示的文件或目录是否存在。 docs.oracle.com

答案 22 :(得分:-4)

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

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/