使用Java基于日期对文件进行排序

时间:2014-07-07 10:00:21

标签: java csv

我需要根据日期对文件进行排序。我已成功编写代码,根据上次修改对文件进行排序,但帮助我根据日期对文件进行排序。应该首先提供较旧的文件。

File dir = new File("E:\\myfiles");
File[] files = dir.listFiles();
Arrays.sort(files, new Comparator<File>() {
    public int compare(File f1, File f2)
    {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    }
});

for (int i = 0; i < files.length; i++)
    System.out.println(files[i]);

我的档案是

E:\myfiles\test_20140704.csv
E:\myfiles\test_20140705.csv
E:\myfiles\test_20140703.csv
E:\myfiles\test_20140706.csv

3 个答案:

答案 0 :(得分:1)

如果您只是想按文件名排序(根据问题中提供的语法)。只需更改比较方法即可。

File dir = new File("E:\\myfiles");
File[] files = dir.listFiles();
Arrays.sort(files, new Comparator<File>() {
   public int compare(File f1, File f2)
   {
      //return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
      return f1.getName().compareTo(f2.getName());
   }
   });

(根据您的最新评论,以下内容不相关)

文件类不支持获取创建时间。但Java 7有一个可以提供帮助的功能

BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);

System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());

请参阅http://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html

答案 1 :(得分:0)

试试这个

    String[] files = dir.list();
    Arrays.sort(files, new Comparator<String>() {
        public int compare(String f1, String f2) {
            return f1.compareTo(f2);
        }
    });

答案 2 :(得分:0)

如果你想要一些比仅按名称排序(这应该适用于你提供的样本文件名)更强大的东西,你应该解析文件名中的日期并按此日期排序。例如:

public int compare(File f1, File f2)
{
    Date d1 = fileNameToDate(f1);
    Date d2 = fileNameToDate(f2);
    return d1.compareTo(d2);
}

//caution: this static is better for performance, but may not be thread-safe
private static SimpleDateFormat DF_YYYYMMDD = new SimpleDateFormat("yyyyMMdd");

private Date fileNameToDate(File f)
{
   int pos = f.getName().lastIndexOf('_');
   if (pos < 0)
   {
     //TODO: error handling if filename is not in the correct format
   }
   String dateStr = f.getName().substring(pos + 1, pos + 1 + 8);
   try
   {
     return DF_YYYYMMDD.parse(dateStr);
   }
   catch(ParseException e)
   {
     //TODO: error handling if filename is not in the correct format        
   }
}