我的问题:我只是想编写一个遍历目录的函数,并获取最新文件被修改的时间。我的意思是有一个说~25.5兆字节文件的目录。我不关心每个文件被修改,我只需要最新修改的时间戳。即 文件1 - 1392567840 文件2 - 1392567841 文件2403 - 1392567849 文件7 - 1392567850
在这种情况下,文件7将是最近修改的时间戳。然而,我发现使用File.lastModified()非常慢,它也发布在另一个stackoverflow帖子中,但是用于文件副本。
因此对于一些先前的研究: File.lastModified() painfully slow!
我确实搜索了这个论坛,并阅读了使用多个线程进行所有最后修改查找的建议,但是我想知道是否有更简单的方法来执行它,因为我只需要最近修改的值(所以我认为这是一个更简单的问题,但是我不确定我是否可以避免单独查找:()。
一些调查代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
long start;
long end;
long average = 0;
int cnt = 10;
for(int i = 0; i < cnt; i++) {
start = System.nanoTime();
System.out.println(GetLastModifiedTimeOfFiles("./data/"));
end = System.nanoTime();
average += (end - start);
}
System.out.println("The average time it took was: " + (average/(cnt * 1.0))/1000000 + " ms to complete!");
}
public static long GetLastModifiedTimeOfFiles(String path) {
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < listOfFiles.length; i++) {
sb.append(listOfFiles[i].getName() + " ");
}
System.out.println(sb.toString().length() + " chars");
long time = 0;
return time;
}
结果:
使用.getName()
时平均为22毫秒使用.lastModified()
时平均为631毫秒所以1)为什么.getName()的执行速度比.lastModified()快〜30倍?
2)是否有一些替代方法,因为我只需要最近修改过的单个文件时间戳?
3)有没有办法让一个数组返回目录中文件的所有修改时间戳,而不是单个查找?
再一次,我知道有一个类似的帖子,所以我希望它不是一个问题,因为我认为这个帖子从2010年开始太老了。如果我违反任何规定,我道歉。
感谢您的帮助!