我可以这样做:
File images = new File(path);
File[] imageList = images.listFiles(new FilenameFilter(){
public boolean accept(File dir, String name)
{
return name.endsWith(".jpg");
}
});
我从堆栈溢出的答案中复制了!
有没有办法列出文件确定类型的"目录"(文件夹(并按反向字母顺序列出?...并且通过反向日期?
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());
}
});
}
您可以使用以下代码。 为我工作。
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);
}
});
}
我遇到了异常
非法论证例外:比较方法违反其总合同!
所以我使用了这个,它工作正常:
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;
}});
指针:
File.isDirectory()
File.lastModified()
如果您更喜欢简洁:
File[] files = folder.listFiles();
Arrays.sort(files, (a, b) -> Long.compare(b.lastModified(), a.lastModified()));
对于基于文件名的排序,添加
object1.getName().toLowerCase(Locale.getDefault())
而不是
object1.getName()
以避免由区域设置更改和大写/小写文件名引起的排序问题
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().toLowerCase(Locale.getDefault()).compareTo(object2.getName().toLowerCase(Locale.getDefault()));
}
});
}
按更改日期对文件数组进行排序的一种快速而优雅的方法是:
Arrays.sort(fileList, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
// For descending
// return -Long.compare(f1.lastModified(), f2.lastModified());
}
});
要对文件数组进行排序,请按名称排序:
Arrays.sort(fileList, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return f1.compareTo(f2);
// For descending
// return -f1.compareTo(f2);
}
});
按日期排序,请选择以下代码,如果您想要名称,则答案已经在:)之上
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;
}
}
});
在反向模式下按上次修改日期对文件进行排序的正确方法是:
Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
对于本说明,您将需要 org.apache 的 commons.io 库,您可以从此处下载
我用这个解决了这个问题
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 和 1 而不是解决我问题的lastModified()
值。
现在,使用新的 android,您可以编写内联短脚本来执行此操作.
要比较文件名:
Arrays.sort(files, Comparator.comparing(File::getName));
要比较修改日期:
Arrays.sort(files, (object1, object2) -> (int) (Math.max(object1.lastModified(), object2.lastModified())));