hi!
ich benutze in meinem TreeModel welches eine dateisystem-struktur anzeigt folgende methoden:
wie ihr euch denken könnt, braucht das ganze relativ lange um den inhalt eines ordners mit vielen unterordnern und dateien einzulesen. (beispiel: windows ordner)
ich konnte die performance über den parameter needSort bereits um einiges verbessern (z.b. für getChildCount wird wohl kaum ein sortiertes array benötigt.
hat jemand vielleicht eine idee wie man das ganze weiter optimieren könnte? vielleicht könnte man das sortieren einfacher gestalten oder das umfüllen in eine arraylist irgendwie vermeiden?
viele dank im voraus & grüsse
m@nu
ich benutze in meinem TreeModel welches eine dateisystem-struktur anzeigt folgende methoden:
Code:
private File[] getContent(File parent, boolean needSort) {
File[] content = parent.listFiles(new FileFilter() {
public boolean accept(File file) {
if(file.isDirectory()) {
return true;
} else if(file.isFile() && showFiles) {
return true;
} else {
return false;
}
}
});
if(content == null) {
content = new File[0];
} else {
if(needSort) {
ArrayList list = new ArrayList();
for(int i = 0; i < content.length; i++) {
list.add(content[i]);
}
Collections.sort(list, new FileComparator());
list.toArray(content);
}
}
/* Rückgabe: */
return content;
}
// Hilfklassen -------------------------------------------------------------
/**
* Diese <code>Comperator</code>-Implementierung vergleicht <code>File</code>-
* Instanzen.
* Es wird folgende Sortierung angestrebt:
* - Alle Ordner (dem Alphabeth nach sortiert)
* - Alle Dateien (dem Alphabeth nach sortiert)
*
* @author Manuel Alabor
*/
private class FileComparator implements Comparator {
public int compare(Object o1, Object o2) {
if(o1 instanceof File && o2 instanceof File) {
File file1 = (File)o1;
File file2 = (File)o2;
if((file1.isDirectory() && file2.isDirectory())
|| (!file1.isDirectory() && !file2.isDirectory())) {
// Beide File-Instanzen sind Ordner:
// -> Namen der beiden vergleichen
return file1.getName().compareTo(file2.getName());
} else if(file1.isDirectory() && !file2.isDirectory()) {
// Nur file1 ist ein Ordner:
// -> -1
return -1;
} else if(!file1.isDirectory() && file2.isDirectory()) {
// Nur file2 ist ein Ordner:
// -> 1
return 1;
} else {
// Sonst immer 0 zurückgeben:
return 0;
}
} else {
throw new ClassCastException("Cannot compare other objects than File's");
}
}
}
wie ihr euch denken könnt, braucht das ganze relativ lange um den inhalt eines ordners mit vielen unterordnern und dateien einzulesen. (beispiel: windows ordner)
ich konnte die performance über den parameter needSort bereits um einiges verbessern (z.b. für getChildCount wird wohl kaum ein sortiertes array benötigt.
hat jemand vielleicht eine idee wie man das ganze weiter optimieren könnte? vielleicht könnte man das sortieren einfacher gestalten oder das umfüllen in eine arraylist irgendwie vermeiden?
viele dank im voraus & grüsse
m@nu