如何按字母顺序File.listFiles?
我有如下代码:
class ListPageXMLFiles implements FileFilter { @Override
public boolean accept(File pathname) {
DebugLog.i("ListPageXMLFiles", "pathname is " + pathname);
String regex = ".*page_\\d{2}\\.xml";
if(pathname.getAbsolutePath().matches(regex)) {
return true;
}
return false;
}
}
public void loadPageTrees(String xml_dir_path) {
ListPageXMLFiles filter_xml_files = new ListPageXMLFiles();
File XMLDirectory = new File(xml_dir_path);
for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) {
loadPageTree(_xml_file);
}
}
效果FileFilter
很好,但listFiles()
似乎是以相反的字母顺序列出文件。有没有一种快速的方法可以告诉listFile()
您按字母顺序列出文件?
回答:
listFiles
带有或不带有过滤器的方法不能保证任何顺序。
但是,它确实返回一个数组,您可以使用对其进行排序Arrays.sort()
。
File[] files = XMLDirectory.listFiles(filter_xml_files);Arrays.sort(files);
for(File _xml_file : files) {
...
}
这File
是可行的,因为是一个可比较的类,默认情况下按字典顺序对路径名进行排序。如果要对它们进行不同的排序,则可以定义自己的比较器。
如果您更喜欢使用流:
下面是一种更现代的方法。要按字母顺序打印给定目录中所有文件的名称,请执行以下操作:
Files.list(Paths.get(dirName)).sorted().forEach(System.out::println)
用System.out::println
您要对文件名进行的任何操作替换。如果只需要以结尾的文件名,"xml"
请执行以下操作:
Files.list(Paths.get(dirName)) .filter(s -> s.toString().endsWith(".xml"))
.sorted()
.forEach(System.out::println)
再次,用所需的任何处理操作替换打印。
以上是 如何按字母顺序File.listFiles? 的全部内容, 来源链接: utcz.com/qa/415789.html