在Android 文件管理器中 会有对文件按时间,大小,修改日期,类型的排序的需求,同样也是用File的api获取属性,然后借助Collections.sort来实现
具体代码如下:
/**
* sort file
*
* @param fileList // file list
* @param sortMethod 「名称、大小、时间」
* @param
* @return List<File>
*/
public ArrayList<File> sortFile(final Context context, ArrayList<File> fileList, final String sortMethod) {
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File object1, File object2) {
return compareFile(context, object1, object2, sortMethod);
}
});
return fileList;
}
/**
* A local file, mount the directory to sort the files to achieve CNcomment:
* 本地文件,挂载目录文件排序实现
*
* @param object1
* @param object2
* @param sortMethod
* @param
* @return
*/
public int compareFile(Context context, File object1, File object2,
String sortMethod) {
if (sortMethod.equals(context.getResources().getString(R.string.name_sort))) {
return compareByName(object1, object2);
} else if (sortMethod.equals(context.getResources().getString(
R.string.size_sort))) {
int len = compareBySize(object1.length(), object2.length());
// the same size ,sort by name
if (len == 0) {
return compareByName(object1, object2);
} else {
return compareBySize(object1.length(), object2.length());
}
} else if (sortMethod.equals(context.getResources().getString(
R.string.date_sort))) {
int len = compareByDate(object1.lastModified(),
object2.lastModified());
// the same data ,sort by name
if (len == 0) {
return compareByName(object1, object2);
} else {
return compareByDate(object1.lastModified(),
object2.lastModified());
}
} else if(sortMethod.equals(context.getResources().getString(R.string.type_sort))){
int len = compareByType(object1,object2);
if(len ==0){
return compareByName(object1,object2);
} else {
return compareByType(object1,object2);
}
}
return 0;
}
/**
* sort according to file name
*
* @param object1
* @param object2
* @return
*/
private int compareByName(File object1, File object2) {
String objectName1 = object1.getName().toLowerCase();
String objectName2 = object2.getName().toLowerCase();
int result = objectName1.compareTo(objectName2);
if (result == 0) {
return 0;
} else if (result < 0) {
return -1;
} else {
return 1;
}
}
/**
* sort according to file size
*
* @param object1
* @param object2
* @return
*/
private int compareBySize(long object1, long object2) {
long diff = object1 - object2;
if (diff > 0) {
return 1;
} else if (diff == 0) {
return 0;
} else {
return -1;
}
}
/**
* file sorted by date modified
*
* @param object1
* @param object2
* @return
*/
public int compareByDate(long object1, long object2) {
long diff = object1 - object2;
if (diff > 0) {
return 1;
} else if (diff == 0) {
return 0;
} else {
return -1;
}
}
/**
* file sorted by date modified
*
* @param object1
* @param object2
* @return
*/
public int compareByType(File object1, File object2) {
int result = -1;
if(object1.isDirectory()&&object2.isDirectory()){
result = 0;
}else if(object1.isDirectory()&&object2.isFile()){
result = 1;
}else if(object1.isFile()&&object2.isDirectory()){
result = -1;
}else if(object1.isFile()&&object2.isFile()){
result = 0;
}
return result;
}
2.引用代码如下:
FileUtils.getInstance(MainActivity.this).sortFileByType(currentFilePath, “时间排序”);//参数 路径和 类型名称
就这样实现了四种按类型排序