File.lastModified()替代?

时间:2014-02-16 16:47:21

标签: java last-modified

我的问题:我只是想编写一个遍历目录的函数,并获取最新文件被修改的时间。我的意思是有一个说~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年开始太老了。如果我违反任何规定,我道歉。

感谢您的帮助!

0 个答案:

没有答案