![](/img/trans.png)
[英]? How can I list all files in directory or drive without using stream and sort it by creation date using just nio api in java
[英]How can I sort files in a directory in 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<File>() {
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<File> {
public int compare( File a, File b ) {
return a.getName().compareTo( b.getName() );
}
}
public class FileSizeComparator implements Comparator<File> {
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<Path> 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)})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.