請問用File.listFiles()方法得到了一個文件數組後﹐怎樣將這個數組裡的文件對象按照修改日期排序呢﹖


請問用File.listFiles()方法得到了一個文件數組後﹐怎樣將這個數組裡的文件對象按照修改日期排序呢﹖
謝謝﹗﹗

5 个解决方案

#1


File bb = new File("D:\\myTemp\\xml");
Map temp = new TreeMap();
File[] files = bb.listFiles(); 
for (int i = 0; i < files.length; i++) {
temp.put(new Date(files[i].lastModified()), files[i]);
}

File[] files2 = (File[]) temp.values().toArray(new File[0]);
for (int i = 0; i < files2.length; i++) {
System.out.println(files2[i]);
}

我大概寫了一下試試好像是對的,你再測測看

#2


不好意思﹐兄弟﹐這個程序只能過濾掉日期相同的數據。並沒有進行到排序﹗謝謝你﹗

#3


自己找了些資料搞定了﹗以下是我的方法﹕
一般在定義類時﹐都內置了比較功能﹐比如說按照自然排序法則對一個數組的元素排序﹗但是這些方法並不能滿足我們的要求﹐所以我們要自己根據排序要求﹐創建一個新的對象﹐這個對象必須實現Comparator接口﹐然後將該對象作為sort的第二個參數。
依上所述﹐我需要實現的是對數組裡的文件對象依據最後修改日期排序﹗因此我們要定義一個類﹐來完成這個功能﹗以下是源代碼﹕
package Funove.DocAdmin;

import java.io.File;
import java.util.Comparator;

public class MyFileComparator implements Comparator
{
private boolean case_sensitive;
public MyFileComparator()
{
this(false);
}

public MyFileComparator(boolean is_case_sensitive)
{
case_sensitive = is_case_sensitive;
}

private int compareTimes(File f1, File f2)
{
long time1 = f1.lastModified();
long time2 = f2.lastModified();
if (time1 > time2)
{
return -1;
}
if (time1 < time2)
{
return 1;
}
return 0;
}

public int compare(Object o1, Object o2)
{
if( o1 == null || o2 == null )
throw new ClassCastException("Null parameter");
if(!(o1 instanceof File) || !(o2 instanceof File) )
throw new ClassCastException("Parameters are not files");
File f1 = (File)o1;
File f2 = (File)o2;
return compareTimes(f1, f2);

}
public boolean equals(Object o)
{
return getClass()== o.getClass();
}
public boolean isCaseSensitive()
{
return case_sensitive;
}
public void setCaseSensitive(boolean is_case_sensitive)
{
case_sensitive = is_case_sensitive;
}
}
 部份代碼參考了sun網站的實例﹗
 當然你也可以根據需要修改為你自己想要的效果﹗

#4


這樣的提問多些,大家也能學到不少東西!

感謝樓主!

#5


怎么可能,我的程序用到treemap,在toarray肯定是自動排序的,怎么可能沒有排序呢,你好好測過沒有啊

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com