如何检查给定路径列表中是否存在文件?

bra*_*ter 5 java file-io file guava

我有50,000个路径的列表,我需要检查这些路径中是否存在文件.现在,我正在独立验证每条路径,如下所示:

public static List<String> filesExist(String baseDirectory, Iterable<String> paths) throws FileNotFoundException{
        File directory = new File(baseDirectory);
        if(!directory.exists()){
            throw new FileNotFoundException("No Directory found: " + baseDirectory );
        }else{
            if(!directory.isDirectory())
                throw new FileNotFoundException(baseDirectory + " is not a directory!");
        }

        List<String> filesNotFound = new ArrayList<String>();

        for (String path : paths) {
            if(!new File(baseDirectory + path).isFile())
                filesNotFound.add(path);
        }
        return filesNotFound;
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法改进它,以便我不创建50,000个File对象?我也在用番石榴.有没有任何实用程序可以帮助我批量exists()方法?

NPE*_*NPE 5

创建50,000个File对象几乎肯定不是瓶颈.实际的文件系统操作可能正在使它变慢.

我有两个建议:

  1. 在检查之前,按位置对路径进行排序,以充分利用文件系统缓存.
  2. 如果子目录不存在,您可以自动假设其中的所有文件和子目录也不存在.