我有一个文件和目录列表,但列表中没有组织。我想用按字母顺序排列的目录,然后是文件对它们进行排序。我怎么能做到这一点?
private void fill(File[] files) {
this.directoryEntries.clear();
// and the ".." == 'Up one level'
if(this.currentDirectory.getParent() != null && !this.currentDirectory.equals("/sd card"))
this.directoryEntries.add(new IconifiedText(
getString(R.string.up_one_level),
getResources().getDrawable(R.drawable.uponelevel)));
Drawable currentIcon = null;
for (File current_File : files){
if (current_File.isDirectory()) {
currentIcon = getResources().getDrawable(R.drawable.folder);
}else{
String fileName = current_File.getName();
/* Determine the Icon to be used,
* depending on the FileEndings defined in:
* res/values/fileendings.xml. */
if(checkEndsWithInStringArray(fileName, getResources().
getStringArray(R.array.fileEndingJs))){
currentIcon = getResources().getDrawable(R.drawable.mimejs);
}else if(checkEndsWithInStringArray(fileName, getResources().
getStringArray(R.array.fileEndingHTML))){
currentIcon = getResources().getDrawable(R.drawable.mimehtml);
}else if(checkEndsWithInStringArray(fileName, getResources().
getStringArray(R.array.fileEndingCSS))){
currentIcon = getResources().getDrawable(R.drawable.mimecss);
}else if(checkEndsWithInStringArray(fileName, getResources().
getStringArray(R.array.fileEndingXML))){
currentIcon = getResources().getDrawable(R.drawable.mimexml);
}else if(checkEndsWithInStringArray(fileName, getResources().
getStringArray(R.array.fileEndingPhp))){
currentIcon = getResources().getDrawable(R.drawable.mimephp);
}else{
currentIcon = getResources().getDrawable(R.drawable.mimetxt);
}
}
switch (this.displayMode) {
case ABSOLUTE:
/* On absolute Mode, we show the full path */
this.directoryEntries.add(new IconifiedText(current_File
.getPath(), currentIcon));
break;
case RELATIVE:
/* On relative Mode, we have to cut the
* current-path at the beginning */
int currentPathStringLenght = this.currentDirectory.getAbsolutePath().length();
this.directoryEntries.add(new IconifiedText(
current_File.getAbsolutePath().
substring(currentPathStringLenght),
currentIcon));
break;
}
}
Collections.sort(this.directoryEntries);
itla.setListItems(this.directoryEntries);
this.setListAdapter(itla);
}
答案 0 :(得分:4)
写一个按isDirectory()
class FileTypeComparator implements Comparator<File> {
@Override
public int compare(File file1, File file2) {
if (file1.isDirectory() && file2.isFile())
return -1;
if (file1.isDirectory() && file2.isDirectory()) {
return 0;
}
if (file1.isFile() && file2.isFile()) {
return 0;
}
return 1;
}
}
另一个按getName()
class FileNameComparator implements Comparator<File> {
@Override
public int compare(File file1, File file2) {
return String.CASE_INSENSITIVE_ORDER.compare(file1.getName(),
file2.getName());
}
}
然后使用Guavas Ordering.compound(Comparator comparator2)合并两个Comparators
Collections.sort(files,Ordering.from(new FileTypeComparator()).compound(new FileNameComparator()));