Hi,
public boolean accept(File f){
if(f.isDirectory()){
return true;
}
else{
boolean erlaubt=false;
String name=f.toString();
name=name.subString(name.indexOf("."));
for(int i=0; i<=extension.length-1; i++){
if(name.indexOf(extension[i]!=-1){
erlaubt=true;
i=extension.length;
}
else erlaubt =false;
}
if(erlaubt==true) return true;
else return false;
}
}
Gibt es da Optimierungsmöglichkeiten?
Ja.
1. Die einfachste und daher sinnvollste:
Speichere in besagtem Verzeichnis einfach nur Image-Dateien, und zwar auschließlich diese, die der FileChooser auch anzeigen darf. Dann müsstest Du höchstens das Verzeichnis auf Gültigkeit prüfen (dessen Pfad/Namen man ja extern konfigurierbar machen kann). accept() könnte dann folgendermaßen aussehen:
public boolean accept(File f){
if(f.isDirectory()){
// Pseudo-Code
if(DirectoryIsCorrekt()) {
return true;
}
}
return false;
}
Andere Optimierungen im else-Zweig, wenn obiges nicht realisierbar ist:
2. Extension-Abfrage:
Speichere die Extensions im Array zusammen mit dem Prefix-Dot (".gif" etc.), dann kannst Du Dir die Generation eines String-Objekts sparen. Desweiteren gibt es noch einige nicht notwendige Statements, die zur Laufzeit aber ausgeführt werden und daher Zeit in Anspruch nehmen. accept() könnte dann folgendermaßen aussehen:
public boolean accept(File f){
if(f.isDirectory()){
return true;
}
else{
String name=f.getPath(); // siehe 3.
for(int i=0; i<=extension.length-1; i++) {
if(name.indexOf(extension[i]!=-1){
// Achtung: diese if-Abfrage würde auch folgendes durchgehen lassen:
// <testdocument.gif.txt>
// ganz sicher ist man mit <name.endsWith(extension[i])>
return true; // durch die return-Anweisung 'verlässt'
// Du an dieser Stelle die Methode und
// implizit die Schleife ;-)
// weitere Anmerkung
// i=extension.length;
// was bezweckst Du mit letztem Statement eigentlich?
// Das, was Du hier anscheindend möchstest, erreicht man
// - wenn notwendig (dies ist hier nicht der Fall!) - verständlicher mit <break;>
}
}
return false;
}
}
3. String name = f.getPath(); // String name=f.toString();
Im Archiv findest Du einen Thread (genauer: http://forum.de.selfhtml.org/archiv/2003/1/35197/#m192657, indem herausgearbeitet wurde, das die Verwendung von .toString() u.U. langsamer sein kann als die der 'direkten' Get-Methoden. In der Summe kann sich das aber bereits bemerkbar machen (oder eben auch nicht, ich habe das nur der Vollständigkeit halber hier erwähnt).
Übrigens: ich habe den Code nicht durch Testen geprüft ;-)
Viele Grüße,
Martin Jung