如何按修改时间的顺序读取目录的文件

时间:2011-08-09 16:28:05

标签: java file timestamp

我对一个目录的读取文件有一个问题。首先,

String[] files = sourceDirectory.list();

我收集一些数据跟踪并将它们放在一个目录中。我希望按创建时间的顺序读取文件,因为我想保留数据跟踪的顺序。

File.list()文档中,它无法保证一致性顺序。如何阅读订单中的文件?

第二个问题是:我想计算消息名称中2条消息之间的间隔时间,因为消息名称有时间戳信息。例如,

trace2011_Aug_3__0_0_1trace2011_Aug_3__0_0_5。如何将字符串值转换为Date对象并计算它们之间的差异?

非常感谢。

5 个答案:

答案 0 :(得分:4)

使用File获取listFiles(),然后使用File.lastModified()按上次修改时间对其进行排序。

File[] files = sourceDirectory.listFiles();

Arrays.sort( files, new Comparator<File>() {
    public int compare( File a, File b ) {
        return a.lastModified() - b.lastModified();
    }
});

要转换包含日期的文件名,请使用String.substring()提取日期部分,然后将生成的子字符串转换为日期。在那之后,获得差异应该很容易。

答案 1 :(得分:2)

问题的前半部分:

File[] files = sourceDir.listFiles();

Arrays.sort(files, new Comparator<File>() { 
    public int compare(File f1, File f2) {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    }
});

// Now files should be sorted by timestamp.

答案 2 :(得分:0)

关于您的第一个问题:只需使用File.listFiles()并使用File对结果数组的Arrays.sort实例进行排序,并使用自定义比较器比较文件的lastModified值。然后遍历排序的数组。

关于第二个问题:使用String.substring从消息中提取日期部分,并使用具有适当模式的SimpleDateFormat将每个字符串更改为Date对象。间隔只是两个日期的时间(以Date.getTime()获得)之间的差异。

答案 3 :(得分:0)

我知道这样做的唯一方法是弹出并读取输出。此链接有一个非常难看的方法,用于从文件中获取创建日期:

http://www.daniweb.com/software-development/java/threads/51670

就日期解析而言,您可以创建自定义日期格式化程序并使用它来解析日期值:

http://exampledepot.com/egs/java.text/ParseDate.html

一旦解析了日期,请使用此方法来获得差异:

How can I calculate a time span in Java and format the output?

祝你好运!

答案 4 :(得分:0)

第一个问题:请参阅tskuzzy的回答。

第二个问题:编写解析器类/方法并使用substring方法将字符串转换为日期。 (实际上只有你知道,字符串是如何构建的)。也许Apache´s String Utils会帮助你。