几周前,我使用这个线程Grabbing specific files in a folder从第三方提供的目录中获取 mkv 文件列表。但是,目录的结构现在已经改变,所以我需要递归地遍历所有文件夹以找到 .mkv 文件。
我听说 Apache 公共库有 FileUtils.listFiles() 方法,这似乎很有希望。据我所知,默认情况下会返回一个集合,并且集合不保证保留顺序(因为这些是 .mkv 视频文件,所以顺序非常重要)。你们中有人有过这种事情的经验吗?
几周前,我使用这个线程Grabbing specific files in a folder从第三方提供的目录中获取 mkv 文件列表。但是,目录的结构现在已经改变,所以我需要递归地遍历所有文件夹以找到 .mkv 文件。
我听说 Apache 公共库有 FileUtils.listFiles() 方法,这似乎很有希望。据我所知,默认情况下会返回一个集合,并且集合不保证保留顺序(因为这些是 .mkv 视频文件,所以顺序非常重要)。你们中有人有过这种事情的经验吗?
从 java 7 开始,实际上不需要使用任何 3rd 方库来遍历文件树。看看新的 Path API。特别是FileVisitor。您可以轻松编写一个仅列出名称以“.mkv”结尾的文件
使用FileUtils.listFiles()
,如果目录里面有很多文件,可能会遇到 NPE 或性能不佳。
如果您需要使用文件的元数据来订购文件,而不仅仅是文件名,您可以使用两者之间的一个
并做类似的事情
FileMetadata
)的必要文件属性的类,该类实现Comparable
List<FileMetadata>
List<>
FileMetadata's Comparable
实现)另一种方式,如果您需要沿目录进行总排序,一个好的解决方案可以使用 [ordered TreeMap]( http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html#TreeMap( java.util.Comparator)
你的目录结构有多深?
例如,假设之前您的文件位于根目录中,而现在它们位于 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());
}
}
}
}