Peter6188: Verzeichnispfad ist falsch!

Hallo Forum,

ich habe ein Problem! Ich möchte einen Verzeichnisscanner schreiben dabei stieß ich auf Probleme die ich ohne einen Denkanstoß nicht mehr bewältigen werde. Ich möchte mir alle Verzeichnisse und Dateien aus einem angegebenen Verzeichnis in eine Liste einlesen. Dazu habe ich eine instanz von "File" angelegt diese instanz bezieht sich auf "C:/" jetzt kannich mir auch alle Datei- und Verzeichnisnamen ausgeben lassen doch sobald ich diese Namen in einer neuen instanz mit Pfad anzeigen lassen möchte ist bei der Ausgabe nicht der _richtige_ Pfad sondern der Pfad des Arbeitsverzeichnis vor dem Namen. Das 2. Problem ist das  ich mittels der "isDirectory"-Methode "erfragen" will ob der jetzt gewählte Name eine Verzeichnis ist. Das Problem ist jetzt das diese Abfrage nie "true" ist obwohl der erfragte Name ein Verzeichnis ist.
Ich kopiere euch das Stück Quellcode nochmal rein falls euch meine Ausführungen zuverwirend waren :-)

String[] filesInDirectory;
 File file = new File(path[0]); // path wird übergeben
 filesInDirectory = file.list();
 File temp;
 for(int i=0; i<filesInDirectory.length; i++){
   temp = new File(filesInDirectory[i]);
   System.out.println(temp.getAbsolutePath());
   while(temp.isDirectory()){ // Diese Abfrage ist immer "false"
     System.out.println("Verzeichnis");
   }
 }

Tschüss
Peter

  1. Hallo,

    ich habe ein Problem! Ich möchte einen Verzeichnisscanner schreiben dabei stieß ich auf Probleme die ich ohne einen Denkanstoß nicht mehr bewältigen werde. Ich möchte mir alle Verzeichnisse und Dateien aus einem angegebenen Verzeichnis in eine Liste einlesen. Dazu habe ich eine instanz von "File" angelegt diese instanz bezieht sich auf "C:/" jetzt kannich mir auch alle Datei- und Verzeichnisnamen ausgeben lassen doch sobald ich diese Namen in einer neuen instanz mit Pfad anzeigen lassen möchte ist bei der Ausgabe nicht der _richtige_ Pfad sondern der Pfad des Arbeitsverzeichnis vor dem Namen.

    OK, nachdem ich diesen etwas wirren Satz jetzt 10 mal durchgelesen
    habe, glaube ich verstanden zu haben was das Problem ist. :-p

    Wie du im Ausgangsposting schriebst, machst du folgendes:

    temp = new File(filesInDirectory[i]);

    Wenn du dir mal filesInDirectory[i] ausgeben lassen würdest, würdest
    du sehen, daß dort nur ein Datei- bzw. Verzeichnisname drinsteht.
    Wenn du nun ein neues File-Objekt daraus erstellst, wird dieser
    Datei- bzw. Verzeichnisname immer relativ zum aktuellen Arbeits-
    verzeichnis interpretiert.

    Du willst also stattdessen den Konstruktor File(File parent, String child)
    verwenden. Als parent gibst du dein "file"-Objekt an. Als child
    dieses filesInDirectory[i].

    Da du aber ohnehin aus deinen über "file.list()" ermittelten Dateinamen
    wieder File-Objekte bastelst, wäre es vielleicht schlauer, wenn du
    stattdessen gleich "file.listFiles()" aufrufen würdest. Dann kriegst
    du nämlich gleich File-Objekte zurück.

    Das 2. Problem ist das  ich mittels der "isDirectory"-Methode "erfragen" will ob der jetzt gewählte Name eine Verzeichnis ist. Das Problem ist jetzt das diese Abfrage nie "true" ist obwohl der erfragte Name ein Verzeichnis ist.

    Folgefehler. Vermutlich existieren die ermittelten Datei- und Verzeichnis-
    namen nicht in deinem aktuellen Arbeitsverzeichnis(!). Laut JavaDoc
    von "isDirectory()" liefert selbiges aber immer nur "true" zurück,
    wenn es sich um ein Verzeichnis handelt, das _existiert_.

    "true if and only if the file denoted by this abstract pathname
    exists and is a directory; false otherwise"

    Mach erstmal den oberen Fehler weg, dann wird auch das untere gehen.

    Gruß
    Slyh

    1. Hallo Sly,

      Danke das du es mir so gut erklären konntest, jetzt Funktioniert das so wie ich es will.

      Tschüss
      Peter