如何按字母顺序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

回到顶部