我需要根据日期对文件进行排序。我已成功编写代码,根据上次修改对文件进行排序,但帮助我根据日期对文件进行排序。应该首先提供较旧的文件。
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
答案 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
}
}