2013-07-10 64 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

相关问题