# File.isDirectory()



## michi2 (28. Feb 2006)

Ich habe in meinem Programm einen JFileChooser mit einem selbstgeschriebenen FileFilter, in dem ich mit File.isDirectory() abfrage ob ne Datei ein Ordner ist. Diese Methode ist jedoch (zumindenst unter Java 1.4) sehr langsam. 

Gibt es ne Möglichkeit das zu beschleunigen?


----------



## The_S (28. Feb 2006)

Naja, so langsam ist die Methode nicht. Gib mal Code.


----------



## Sky (28. Feb 2006)

Was macht dein FileFilter denn genau? 

Wenn es Dir darum geht, dass Du nur Verzeichnisse auswählen willst, guck mal da: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFileChooser.html#setFileSelectionMode(int)


----------



## michi2 (28. Feb 2006)

```
class JavaFilter extends javax.swing.filechooser.FileFilter	//DateiFilter
   {
   public boolean accept(File f)
      {
      boolean accept = f.isDirectory();
      if(!accept)
         {
         String suffix = getSuffix(f);
         if(suffix != null)
            accept = (suffix.equals("java") || suffix.equals("class") || suffix.equals("jar"));	//Suffix überprüfen
         }
      return accept;
      }

   public String getDescription()
      {
      return "Java Dateien (*.java, *.class, *.jar)";	//Filtername
      }

   private String getSuffix(File f)		//Suffix ermitteln
      {
      String s = f.getPath();
      String suffix = null;
      int i = s.lastIndexOf('.');
      if(i > 0 && i < s.length() - 1)
         suffix = s.substring(i + 1).toLowerCase();
      return suffix;
      }
   }
```
Der FileChooser braucht sehr lange bis er öffnet. Darum hab ich JProfiler drauf angesetzt und da hat man eindeutig gesehen das f.isDirectory() dran schuld ist!


----------



## Sky (28. Feb 2006)

Wie schnell ist dein Rechner ?

Wie viele Verzeichnisse liegen in dem "Start-Ordner" ?


----------



## flanker (28. Feb 2006)

Probier's mal hiermit, ohne jetzt groß getestet zu haben, sollte etwas schneller werden:

```
class JavaFilter extends javax.swing.filechooser.FileFilter {

  private final String[] ARR = {".java", ".jar", ".war", ".class", ".ear"};


  public boolean accept(File f) {

    if (f.isDirectory()) return true;

    String fName = f.getName().toLowerCase();

    for (int i = 0; i < ARR.length; i++) {
      String s = ARR[i];
      if (fName.endsWith(s)) return true;
    }

    return false;
  }

  public String getDescription() {
    return "Java Dateien (*.java, *.class, *.jar, *.war, *.ear)";
  }
}
```


----------



## michi2 (3. Mrz 2006)

Sky:
1) schnell genug (Pentium 4 2,6GHz)
2) schon einiges 

flanker: werds probieren...


----------



## michi2 (21. Apr 2006)

Hilft auch nicht wirklich...


----------

