使用java递归搜索.mkv文件的目录

时间:2013-08-21 16:56:46

标签: java apache-commons mkv

几个星期前,我使用这个帖子Grabbing specific files in a folder从第三方提供的目录中获取mkv文件列表。但是,目录的结构现在已经改变,所以我需要递归遍历所有文件夹以找到.mkv文件。

我听说Apache commons库有FileUtils.listFiles()方法,看起来很有希望。据我所知,默认情况下返回一个集合,并且集合不保证订单被保留(因为这些是.mkv视频文件,顺序非常重要)。你们中有谁有过这方面的经验吗?

3 个答案:

答案 0 :(得分:1)

从java 7开始,实际上不需要使用任何第三方库来遍历文件树。看看新的Path API。特别是FileVisitor。您可以轻松编写一个仅列出名称以“.mkv”结尾的文件

答案 1 :(得分:1)

使用FileUtils.listFiles(),如果目录中有大量文件,可能会遇到NPE或性能不佳。

如果您需要使用文件的元数据来订购文件,而不仅仅是通过文件名,您可以使用

之间的文件

并执行类似

的操作
  • 创建一个具有必要文件属性的类,用于实现FileMetadata的订单(类Comparable
  • 创建一个emtpy List<FileMetadata>
  • 遍历目录并添加到List<>
  • Call Collections.sort(List&lt;&gt;); (此调用使用FileMetadata's Comparable实施)

另一种方式,如果您需要沿目录进行总排序,可以使用[有序TreeMap](http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html#TreeMap(java.util.Comparator)

答案 2 :(得分:1)

您的目录结构有多少级别?

例如,先前说过您的文件位于根目录中,现在它们位于root / domain1,root / domain2,root / domain3等中。

为此,我写了一些相当简单的东西。

    String rootPath = <path_to_root>;
    File[] domains = new File(rootPath).listFiles();
    for (File domain : domains) {
        if (domain.isDirectory()) {
            File[] files = new File(domain.getAbsolutePath()).listFiles();
            for (File file : files) {
                if (file.isFile() && file.getAbsolutePath().endsWith(".mkv")) {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }