Überprüfen ob ein Objekt ein Verzeichnis oder eine Datei ist

Roumeo

Mitglied
Hallo Leute,

ich tue mich gearde daran eine Verzeichnisstruktur Rekursiv auszulesen und alle darin enthaltenden Dateien auszugeben.

Allerdings hapert es gerade bei der Überprüfung, ob ein Objekt ein Verzeichnis oder eine Datei ist (Hervorgehobener Quellcode). Als ich auf: Objekt.isFile() überprüft habe, hat er zB. .java Dateien nicht als File angenommen. Bei: Objekt.isDirectory() erkennt er keine Verzeichnisse als Verzeichnisse und geht in der zugehörigen Bedingung in den else Zweig...

Könnt ihr mir vielleicht weiterhelfen? Danke schonmal!



Folgenden Quelltext habe ich dafür geschrieben:

Code:
public class rekursion2 {

  public static void main(String[] args) throws IOException{
    String Verzeichnis = "D:\\delalttestordner";

    Verzeichnisrekursion(Verzeichnis);



  }
  public static void Verzeichnisrekursion(String Verzeichnis) {
    System.out.println("Ich soll was mit dem Verzeichnis "+Verzeichnis+" machen");
    
    File dir = new File(Verzeichnis+"\\");
    if(dir.exists()) {
      System.out.println("Gerade befinde ich mich im Verzeichnis: "+dir+"  !");
      String[] files = dir.list();
      for(int i = 0;i<files.length;i++) {
        File tmpdatei = new File(Verzeichnis+files[i]);
        if(tmpdatei.isDirectory()) {
          System.out.println("Ich habe gerade das Verzeichnis "+Verzeichnis+"\\"+files[i]+" gefunden und leier an dort auch direkt weiter zu machen");
          Verzeichnisrekursion(Verzeichnis+"\\"+files[i]+"\\");
        }else{
          System.out.println("Gerade lese ich die Datei: "+files[i]+" aus.");
          System.out.println(tmpdatei);
        }      }
    }
  }
}
 
Hallo!

Das Problem ist das "//" das du überall einfügst, wo unter Windows ein "\" und unter Linux (wie bei mir) ein "/" hingehört.

Diesen so genannten "File Separator" lässt sich aus den System Properties auslesen (siehe hier).

Dein Programm sieht dann so aus:

Code:
import java.io.File;
import java.io.IOException;

public class rekursion2 {

  public static void main(String[] args) throws IOException{
    String Verzeichnis = "/home/rocme/desktop";

    Verzeichnisrekursion(Verzeichnis);
  }
  public static void Verzeichnisrekursion(String Verzeichnis) {
        String separator = System.getProperty("file.separator");
    System.out.println("Ich soll was mit dem Verzeichnis "+Verzeichnis+" machen");

    File dir = new File(Verzeichnis);
    if(dir.exists()) {
      System.out.println("Gerade befinde ich mich im Verzeichnis: "+dir+"  !");
      String[] files = dir.list();
      for(int i = 0;i<files.length;i++) {
        File tmpdatei = new File(Verzeichnis+ separator + files[i]);
        if(tmpdatei.isDirectory()) {
          System.out.println("Ich habe gerade das Verzeichnis "+Verzeichnis + separator + files[i]+" gefunden und leier an dort auch direkt weiter zu machen");
          Verzeichnisrekursion(Verzeichnis + separator + files[i]);
        }else{
          System.out.println("Gerade lese ich die Datei: "+files[i]+" aus.");
          System.out.println(tmpdatei);
        }      }
    }
  }
}

Und damit du jetzt auch glaubst, dass das funktioniert ;-)
rocme@gauss:~/desktop$ pwd
/home/rocme/desktop
rocme@gauss:~/desktop$ ls
DSC00838.JPG DSC00840.JPG DSC00931.JPG DSC00939.JPG DSC00945.JPG DSC00967.JPG DSC00986.JPG DSC01005.JPG java
rocme@gauss:~/desktop$ cd java/
rocme@gauss:~/desktop/java$ ls
rekursion2.class rekursion2.java
rocme@gauss:~/desktop/java$ java rekursion2
Ich soll was mit dem Verzeichnis /home/rocme/desktop machen
Gerade befinde ich mich im Verzeichnis: /home/rocme/desktop !
Gerade lese ich die Datei: DSC01005.JPG aus.
/home/rocme/desktop/DSC01005.JPG
Gerade lese ich die Datei: DSC00986.JPG aus.
/home/rocme/desktop/DSC00986.JPG
Gerade lese ich die Datei: DSC00945.JPG aus.
/home/rocme/desktop/DSC00945.JPG
Ich habe gerade das Verzeichnis /home/rocme/desktop/java gefunden und leier an dort auch direkt weiter zu machen
Ich soll was mit dem Verzeichnis /home/rocme/desktop/java machen
Gerade befinde ich mich im Verzeichnis: /home/rocme/desktop/java !
Gerade lese ich die Datei: rekursion2.class aus.
/home/rocme/desktop/java/rekursion2.class
Gerade lese ich die Datei: rekursion2.java aus.
/home/rocme/desktop/java/rekursion2.java
Gerade lese ich die Datei: DSC00840.JPG aus.
/home/rocme/desktop/DSC00840.JPG
Gerade lese ich die Datei: DSC00931.JPG aus.
/home/rocme/desktop/DSC00931.JPG
Gerade lese ich die Datei: DSC00939.JPG aus.
/home/rocme/desktop/DSC00939.JPG
Gerade lese ich die Datei: DSC00838.JPG aus.
/home/rocme/desktop/DSC00838.JPG
Gerade lese ich die Datei: DSC00967.JPG aus.
/home/rocme/desktop/DSC00967.JPG
rocme@gauss:~/desktop/java$
 
Hier ein paar Punkte die mir aufgefallen sind:

1. Code Konvention: Methoden und Variablen schreibt man in Java normalerweise klein am Anfang danach groß z.B. dasIstEineVariable (bei uns ist es auch üblich das alles auf Englisch ist) http://java.sun.com/docs/codeconv/

Ist mehr eine Richtlinie^^

2. listFiles() ist besser als nur list() da du hier gleich wieder File Objekte bekommst.

3.
String separator = System.getProperty("file.separator");

geht einfacher mit File.seperator();

4. foreach benutzen
Wenn du Java 5 oder höher benutzt empfiehlt es sich for each zu benutzen:

for(String string: files) {

}
 
Danke auch dir Anime-Otaku,

da ich noch recht frisch in Java bin, muss ich natürlich noch viel lernenö. Deshalb kommen mir deine Tipps gerade richtig :). Da ich habe ich mal wieder dazugelernt!!

Dankööö
 
Zurück