2013-07-10 90 views
1

我正在嘗試在修改日期的數組中排列目錄中的文件列表。這裏是代碼我使用它如何使用修改日期對文件進行排序?

public static void sortFilesByLastModifiedDate(ArrayList<String> myfiles) { 
    String[] myfile = new String[myfiles.size()]; 
    myfile = myfiles.toArray(myfile); 

    Comparator<File> comparator = new Comparator<File>() { 
      @Override 
      public int compare(File o1, File o2) { 
        return Long.valueOf(o1.lastModified()). 
          compareTo(o2.lastModified()); 
      } 
     }; 
     Arrays.sort(myfile, comparator); 

    } 

Arrays.sort(myfile, comparator);控制檯顯示在此代碼 在類型數組的方法sort(T[], Comparator<? super T>)錯誤是不適用的論點(String[], Comparator<File>)

請建議如何解決這個問題?

+0

你可以告訴我們什麼錯誤由'sort()'給出? –

+0

'myFile'是一個字符串數組,你試圖用'File'比較器對它進行排序。 –

+1

嘗試Collections.sort(列表,比較器),不需要將列表轉換爲數組 –

回答

2

要麼將​​您的列表更改爲包含File對象,要麼將您的比較器更改爲在String對象上操作。

我會推薦以前的選項。這允許您在將它們傳遞到比較器之前建立文件。請注意,如果文件不存在(可能是意外),File.lastModified()返回0

由於mentioned in the comments,你可以使用Collections.sort()排序列表,所以你不需要轉換爲數組。

0

這意味着你不能比較文件和字符串對象。 取而代之的是你可以比較和字符串,如:

Arrays.sort(myfile,new Comparator<String>() { 

     @Override 
     public int compare(String lhs, String rhs) { 
      //todo: finish here. 
      return Long.valueOf(new File(lhs).lastModified()).compareTo(new File(rhs).lastModified());     
     } 
    }); 

我想你可以嘗試使用文件名,而不是直接的文件對象的。 在「比較」中,您加載了要在內部進行比較的2個文件,並管理錯誤(如IOException)。

+0

您的示例將按字典順序比較文件,這是令人困惑的(和不正確的)。 –

+0

呃我的壞,我要編輯。 – BigbangRevo

相關問題