我有一个文件和目录列表,但该列表没有组织。我想先按字母顺序列出目录,然后再按文件对它们进行排序。我怎样才能做到这一点?
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);
}
Run Code Online (Sandbox Code Playgroud)
编写一个比较器来排序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;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种排序方式是getName()
class FileNameComparator implements Comparator<File> {
@Override
public int compare(File file1, File file2) {
return String.CASE_INSENSITIVE_ORDER.compare(file1.getName(),
file2.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用 Guavas Ordering.compound(Comparator comparator2)将两者结合起来Comparators
Collections.sort(files,Ordering.from(new FileTypeComparator()).compound(new FileNameComparator()));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2585 次 |
最近记录: |