231

我正在玩一些新的 Java 7 IO 功能。实际上,我正在尝试检索文件夹中的所有 XML 文件。但是,当文件夹不存在时,这会引发异常。如何使用新的 IO 检查文件夹是否存在?

public UpdateHandler(String release) {
    log.info("searching for configuration files in folder " + release);
    Path releaseFolder = Paths.get(release);
    try(DirectoryStream<Path> stream = Files.newDirectoryStream(releaseFolder, "*.xml")){
    
        for (Path entry: stream){
            log.info("working on file " + entry.getFileName());
        }
    }
    catch (IOException e){
        log.error("error while retrieving update configuration files " + e.getMessage());
    }
}
4

10 回答 10

307

使用java.nio.file.Files

Path path = ...;

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

您可以选择传递此方法LinkOption值:

if (Files.exists(path, LinkOption.NOFOLLOW_LINKS)) {

还有一个方法notExists

if (Files.notExists(path)) {
于 2013-03-22T13:30:57.900 回答
231

非常简单:

new File("/Path/To/File/or/Directory").exists();

如果你想确定它是一个目录:

File f = new File("/Path/To/File/or/Directory");
if (f.exists() && f.isDirectory()) {
   ...
}
于 2013-03-22T13:26:58.220 回答
58

使用新 IO 检查目录是否存在:

if (Files.isDirectory(Paths.get("directory"))) {
  ...
}

isDirectorytrue如果文件是目录则返回;false如果文件不存在,不是目录,或者无法确定文件是否是目录。

请参阅:文档

于 2014-09-23T16:59:01.773 回答
7

从文件夹目录的字符串生成文件

String path="Folder directory";    
File file = new File(path);

和使用方法存在。
如果你想生成你应该使用的文件夹 mkdir()

if (!file.exists()) {
            System.out.print("No Folder");
            file.mkdir();
            System.out.print("Folder created");
        }
于 2016-08-16T23:16:28.340 回答
6

您需要将您的 Path 转换为 aFile并测试是否存在:

for(Path entry: stream){
  if(entry.toFile().exists()){
    log.info("working on file " + entry.getFileName());
  }
}
于 2013-03-22T13:28:20.480 回答
5

不需要单独调用该exists()方法,因为isDirectory()隐式检查目录是否存在。

于 2014-03-17T12:45:52.543 回答
5
import java.io.File;
import java.nio.file.Paths;

public class Test
{

  public static void main(String[] args)
  {

    File file = new File("C:\\Temp");
    System.out.println("File Folder Exist" + isFileDirectoryExists(file));
    System.out.println("Directory Exists" + isDirectoryExists("C:\\Temp"));

  }

  public static boolean isFileDirectoryExists(File file)

  {
    if (file.exists())
    {
      return true;
    }
    return false;
  }

  public static boolean isDirectoryExists(String directoryPath)

  {
    if (!Paths.get(directoryPath).toFile().isDirectory())
    {
      return false;
    }
    return true;
  }

}
于 2018-01-31T15:12:45.920 回答
1
File sourceLoc=new File("/a/b/c/folderName");
boolean isFolderExisted=false;
sourceLoc.exists()==true?sourceLoc.isDirectory()==true?isFolderExisted=true:isFolderExisted=false:isFolderExisted=false;
于 2013-03-22T13:43:22.773 回答
1

我们可以检查文件和三个文件夹。

import java.io.*;
public class fileCheck
{
    public static void main(String arg[])
    {
        File f = new File("C:/AMD");
        if (f.exists() && f.isDirectory()) {
        System.out.println("Exists");
        //if the file is present then it will show the msg  
        }
        else{
        System.out.println("NOT Exists");
        //if the file is Not present then it will show the msg      
        }
    }
}
于 2017-05-18T09:08:04.957 回答
1

SonarLint中,如果您已经有了路径,请使用path.toFile().exists()而不是以Files.exists获得更好的性能。

Files.exists方法在 JDK 8 中的性能明显较差,并且在用于检查实际不存在的文件时会显着降低应用程序的速度。和也是

如此。Files.notExistsFiles.isDirectoryFiles.isRegularFile

不合规代码示例:

Path myPath;
if(java.nio.Files.exists(myPath)) {  // Noncompliant
    // do something
}

合规解决方案:

Path myPath;
if(myPath.toFile().exists())) {
    // do something
}
于 2019-07-29T08:41:48.250 回答