2012-09-13 36 views
8

我能够做到这一点:Android:如何按日期降序按名称排序的Drectory列表?

File images = new File(path); 
    File[] imageList = images.listFiles(new FilenameFilter(){ 
     public boolean accept(File dir, String name) 
     { 
      return name.endsWith(".jpg"); 
     } 
    }); 

我从计算器的答案抄!

有没有办法来确定listfile中那种“目录”(文件夹),并通过反向字母顺序列出? ...并通过反向日期?

+0

肯定。你有什么尝试? – njzk2

+0

我没有tryed没有到现在为止... – realtebo

回答

17
final File[] sortedFileName = images.listFiles() 

if (sortedFileName != null && sortedFileName.length > 1) { 
     Arrays.sort(sortedFileName, new Comparator<File>() { 
      @Override 
      public int compare(File object1, File object2) { 
       return object1.getName().compareTo(object2.getName()); 
      } 
    }); 
} 

使用Array.sort()比较的文件的名称。

编辑: 使用此代码按日期

final File[] sortedByDate = folder.listFiles(); 

if (sortedByDate != null && sortedByDate.length > 1) { 
     Arrays.sort(sortedByDate, new Comparator<File>() { 
      @Override 
      public int compare(File object1, File object2) { 
       return (int) ((object1.lastModified() > object2.lastModified()) ? object1.lastModified(): object2.lastModified()); 
      } 
    }); 
} 
+0

哇!!!!以及比较上次修改日期的方法?或创建日期,是相同的... – realtebo

+1

lastmodifed返回一长。所以,你必须使用“>”内比较 – Blackbelt

+0

只需修改代码黑带:我必须删除@override ...我不知道为什么,但是Eclipse告诉我删除......我已经删除 – realtebo

2

指针:

File.isDirectory() 

File.lastModified() 
+0

感谢! lastModified帮我下半年的问题 – realtebo

0

排序如果要排序日期明智然后选择下面的代码,如果你想名字,那么已经回答是上面:)

File f = new File("/home/myfiles"); 
File [] files = f.listFiles(); 
Arrays.sort(files, new Comparator(){ 
public int compare(Object o1, Object o2) { 

    if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
     return -1; 
    } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
     return +1; 
    } else { 
     return 0; 
    } 
} 
}); 
1

下令在反向模式修改的最后日期的文件正确的方法是这样做的:

Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 

这个指令,你需要从org.apache的commons.io库,你可以从here

1

您可以使用下面的代码下载。为我工作。

final File[] files= file.listFiles(); 
if (files != null && files.length > 1) { 
      Collections.sort(Arrays.asList(files), new Comparator<File>() { 
       public int compare(File o1, File o2) { 
        long lastModifiedO1 = o1.lastModified(); 
        long lastModifiedO2 = o2.lastModified(); 

        return (lastModifiedO2 < lastModifiedO1) ? -1 : ((lastModifiedO1 > lastModifiedO2) ? 1 : 0); 
       } 
      }); 
     } 
0

我用这个

final File[] sortedByDate = folder.listFiles(); 

if (sortedByDate != null && sortedByDate.length > 1) { 
     Arrays.sort(sortedByDate, new Comparator<File>() { 
      @Override 
      public int compare(File object1, File object2) { 
       return (int) ((object1.lastModified() > object2.lastModified()) ? 0: 1); 
      } 
    }); 
} 

解决了这个问题,我返回0和lastModified()值解决我的问题的1 insted的。

0

我得到一个异常

抛出:IllegalArgumentException:比较法违反其总承包!

,所以我用这个和它的工作确定:

Arrays.sort(filesList, new Comparator<File>() { 
    @Override 
    public int compare(File a, File b) { 
     if(a.lastModified() < b.lastModified()) 
     return 1; 
     if(a.lastModified() > b.lastModified()) 
     return -1; 
     return 0; 
}});