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

标签 java file file-io 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;
    }

有没有办法改进它,这样我就不会创建 50,000 个文件对象?我也在用 Guava 。那里有任何实用程序可以帮助我使用批量 exists() 方法吗?

最佳答案

创建 50,000 个 File 对象几乎肯定不是瓶颈。实际的文件系统操作可能是导致速度变慢的原因。

我有两个建议:

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

关于java - 我如何检查给定路径列表中的文件是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046772/

相关文章:

java - Maven 存储库如何工作

java - Log4j MaxFileSize 与 DailyRollingFileAppender

使用 GL_ELEMENT_ARRAY_BUFFER 时的 Java GLFW 段错误

java - Java中具有不同引用类型的对象类型有什么优点?

c - 有什么方法可以使用给定的 inode 编号搜索文件或文件名?

c++ - 检查有效输入 C++

c - 如果我正在创建文件路径,哪个应该更快?

java - 文件.createDirectory() : FileAlreadyExistsException

c - 如何使用 ANSI C 删除文件中的字符串?

c - 区分socket上的接收文件