我想获取目录中的文件列表,但我想对其进行排序,使得最旧的文件是第一个.我的解决方案是调用File.listFiles,然后根据File.lastModified求助于列表,但我想知道是否有更好的方法.
编辑:我建议的当前解决方案是使用匿名比较器:
File[] files = directory.listFiles();
Arrays.sort(files, new Comparator<File>(){
public int compare(File f1, File f2)
{
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
} });
Run Code Online (Sandbox Code Playgroud) 我想知道它是如何File.exists()工作的.我不太清楚文件系统是如何工作的,所以我应该先开始阅读.
但是要获得快速的预先信息:
File.exists()如果在某个日志中注册了该路径和文件名,是对文件系统的单个操作的调用吗?或者操作系统是否获取目录的内容,然后通过它扫描匹配?
我认为这将取决于文件系统,但也许所有文件系统都使用快速方法?
我不是在谈论网络和磁带系统.让它保持ntfs,extX,zfs,jfs :-)
我正在使用Java的Arrays.sort()函数按照上次修改时间对文件列表进行排序.245个文件的排序大约需要5秒钟.这对我来说似乎太长了.我觉得它不应该超过0.5秒.这是一个很好的假设吗?我究竟做错了什么?或者这听起来正常吗?
public static class LastModifiedComparator implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return (int)(f1.lastModified() - f2.lastModified());
}
}
File folder = new File( "C:\\Whatever\\" );
File[] filesInFolder = folder.listFiles();
logger.debug("Starting File Sort");
Arrays.sort(filesInFolder, new LastModifiedComparator());
logger.debug("Done File Sort");
Run Code Online (Sandbox Code Playgroud)
日志输出
2012-08-10 14:24:20,333 DEBUG http-8080-4 <ClassName>:73 - Starting File Sort
2012-08-10 14:24:25,915 DEBUG http-8080-4 <ClassName>:75 - Done File Sort
Run Code Online (Sandbox Code Playgroud)