如何在java中的目录中对文件进行排序?

这是我的代码,它的工作原理! 但我希望能够根据名称,大小,修改日期等对文件列表进行排序

import java.io.File; import org.apache.commons.io.FileUtils; public class StartingPoint { public static void main(String[] args) { File file = new File( "/home/t/lectures"); File[] files = file.listFiles(); for (File f : files) { System.out.println("File : " + f.getName() + " [" + FileUtils.byteCountToDisplaySize(f.length()) + "]"); } } } 

 Arrays.sort( files, new Comparator() { public int compare( File a, File b ) { // do your comparison here returning -1 if a is before b, 0 if same, 1 if a is after b } } ); 

您可以定义一堆不同的Comparator类来进行不同的比较,例如:

 public class FileNameComparator implements Comparator { public int compare( File a, File b ) { return a.getName().compareTo( b.getName() ); } } public class FileSizeComparator implements Comparator { public int compare( File a, File b ) { int aSize = a.getSize(); int bSize = b.getSize(); if ( aSize == bSize ) { return 0; } else { return Integer.compare(aSize, bSize); } } } ... 

然后你只需要交换em:

 Arrays.sort( files, new FileNameComparator() ); 

要么

 Arrays.sort( files, new FileSizeComparator() ); 

Java8中按上次修改时间排序的示例:

 Path dir = Paths.get("./path/somewhere"); Stream sortedList = Files.list(dir) .filter(f -> Files.isDirectory(f) == false) // exclude directories .sorted((f1, f2) -> (int) (f1.toFile().lastModified() - f2.toFile().lastModified())); 

然后你可以将sortedList转换为Array或继续使用.forEach的lambda表达式:

  .forEach(f -> {do something with f (f is Path)})