如何在 Android 中按文件名或日期按升序或降序对文件或文件夹进行排序?
How to sort file or folder by filename or date at ascending or descending in Android?
以下示例代码来自网络,希望the List<String> files
按文件名升序或降序排序。
我希望 List<String> files
by date of file 升序或降序,我该怎么做?谢谢!
与List<String> directories
相同的问题。
List<String> files = Arrays.asList(f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File f=new File(dir, name);
return f.isFile()&&(f.isHidden()==false);
}
}));
Collections.sort(files);
List<String> directories = Arrays.asList(f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File f=new File(dir, name);
return f.isDirectory()&& (f.isHidden()==false);
}
}));
Collections.sort(directories);
只需提供您的文件数组即可简单排序。
Arrays.sort(files, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
}
});
演示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File path = Environment.getExternalStoragePublicDirectory("/DCIM/Camera");
File[] filesList = path.listFiles();
for (int i = 0; i < filesList.length; i++) {
Date lastModDate = new Date(filesList[i].lastModified());
Log.i("Pre sorted", "File last modified @ : " + lastModDate.toString());
}
Arrays.sort(filesList, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
}
});
Log.i("sorted", "----------------------------------------");
for (int i = 0; i < filesList.length; i++) {
Date lastModDate = new Date(filesList[i].lastModified());
Log.i("Pro sorted", "File last modified @ : " + lastModDate.toString());
}
}
您可以像下面那样使用基于文件名的排序并更改日期和其他比较的值。或者直接使用ApacheCommons,它会给出直接的API
File[] directoryList = currentFolder.listFiles();
if (directoryList != null) {
List<File> directoryListing = new ArrayList<File>();
directoryListing.addAll(Arrays.asList(directoryList));
Collections.sort(directoryListing, new SortFileName());
Collections.sort(directoryListing, new SortFolder());
}
//sorts based on the files name
public class SortFileName implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return f1.getName().compareTo(f2.getName());
}
}
//sorts based on a file or folder. folders will be listed first
public class SortFolder implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
if (f1.isDirectory() == f2.isDirectory())
return 0;
else if (f1.isDirectory() && !f2.isDirectory())
return -1;
else
return 1;
}
}
可能会晚回答 bt 此方法按修改日期的 desc 顺序排序文件
File[] listFile = dir.listFiles();
Arrays.sort(listFile, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Long.compare(o2.lastModified(), o1.lastModified());
}
});
以下示例代码来自网络,希望the List<String> files
按文件名升序或降序排序。
我希望 List<String> files
by date of file 升序或降序,我该怎么做?谢谢!
与List<String> directories
相同的问题。
List<String> files = Arrays.asList(f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File f=new File(dir, name);
return f.isFile()&&(f.isHidden()==false);
}
}));
Collections.sort(files);
List<String> directories = Arrays.asList(f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File f=new File(dir, name);
return f.isDirectory()&& (f.isHidden()==false);
}
}));
Collections.sort(directories);
只需提供您的文件数组即可简单排序。
Arrays.sort(files, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
}
});
演示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File path = Environment.getExternalStoragePublicDirectory("/DCIM/Camera");
File[] filesList = path.listFiles();
for (int i = 0; i < filesList.length; i++) {
Date lastModDate = new Date(filesList[i].lastModified());
Log.i("Pre sorted", "File last modified @ : " + lastModDate.toString());
}
Arrays.sort(filesList, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
}
});
Log.i("sorted", "----------------------------------------");
for (int i = 0; i < filesList.length; i++) {
Date lastModDate = new Date(filesList[i].lastModified());
Log.i("Pro sorted", "File last modified @ : " + lastModDate.toString());
}
}
您可以像下面那样使用基于文件名的排序并更改日期和其他比较的值。或者直接使用ApacheCommons,它会给出直接的API
File[] directoryList = currentFolder.listFiles();
if (directoryList != null) {
List<File> directoryListing = new ArrayList<File>();
directoryListing.addAll(Arrays.asList(directoryList));
Collections.sort(directoryListing, new SortFileName());
Collections.sort(directoryListing, new SortFolder());
}
//sorts based on the files name
public class SortFileName implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return f1.getName().compareTo(f2.getName());
}
}
//sorts based on a file or folder. folders will be listed first
public class SortFolder implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
if (f1.isDirectory() == f2.isDirectory())
return 0;
else if (f1.isDirectory() && !f2.isDirectory())
return -1;
else
return 1;
}
}
可能会晚回答 bt 此方法按修改日期的 desc 顺序排序文件
File[] listFile = dir.listFiles();
Arrays.sort(listFile, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Long.compare(o2.lastModified(), o1.lastModified());
}
});