几个星期前,我使用这个帖子Grabbing specific files in a folder从第三方提供的目录中获取mkv文件列表。但是,目录的结构现在已经改变,所以我需要递归遍历所有文件夹以找到.mkv文件。
我听说Apache commons库有FileUtils.listFiles()方法,看起来很有希望。据我所知,默认情况下返回一个集合,并且集合不保证订单被保留(因为这些是.mkv视频文件,顺序非常重要)。你们中有谁有过这方面的经验吗?
答案 0 :(得分:1)
从java 7开始,实际上不需要使用任何第三方库来遍历文件树。看看新的Path API。特别是FileVisitor。您可以轻松编写一个仅列出名称以“.mkv”结尾的文件
答案 1 :(得分:1)
使用FileUtils.listFiles()
,如果目录中有大量文件,可能会遇到NPE或性能不佳。
如果您需要使用文件的元数据来订购文件,而不仅仅是通过文件名,您可以使用
之间的文件并执行类似
的操作FileMetadata
的订单(类Comparable
)List<FileMetadata>
List<>
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());
}
}
}
}