Datei in Verzeichnissen suchen - NullPointerException

Hallo,
ich bin noch Java-Beginner und möchte eine Datei (x.ini) in Verzeichnissen suchen. Dazu hab ich ein Beispiel aus einem Google-Artikel abgeschrieben (siehe unten). Es läuft aber nicht  - NullPointerException. Wo ist der versteckte Fehler? Für eine Antwort wäre ich dankbar.
Gruß michael
 
Code:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class VerzeichnisDurchsuchen {

  public static void main(String[] args) {
        String verzName = „/home/“;
        ArrayList<File> files = getPaths(new File(verzName),
                new ArrayList<File>());
        if(files == null) return;
        try {
            for (int i = 0; i < files.size(); i++)
                System.out.println(files.get(i).getCanonicalPath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static ArrayList<File> getPaths(File file, ArrayList<File> list) {
        if (file == null || list == null || !file.isDirectory())
            return null;
        File[] fileArr = file.listFiles();
        for (File f : fileArr) {
            if (f.isDirectory()) {
                getPaths(f, list);
            }
            list.add(f);
        }
        return list;
    }
}

Fehler:
Exception in thread „main“ java.lang.NullPointerException
    at VerzeichnisDurchsuchen.getPaths(VerzeichnisDurchsuchen.java:24)
    at VerzeichnisDurchsuchen.getPaths(VerzeichnisDurchsuchen.java:26)
    at VerzeichnisDurchsuchen.getPaths(VerzeichnisDurchsuchen.java:26)

Auch hallo

Mit Java8 und NetBeans 8 unter Windows7 funktioniert der Quellcode und gibt die Verzeichnisstruktur und die Dateinamen aus.
Aber:

  public static void main(String[] args) {
        String verzName = „/home/“;

statt „/home/“ sollte man besser ein existierendes Verzeichnis einsetzen, z.B. „C:\Program Files\Internet Explorer“.

mfg M.L.

Hallo M.L.,
erst mal danke für die schnelle Antwort.
Ich hatte vergessen, dass ich mit Linux Mint und Eclipse-Knepler bzw. NetBeans IDE 7.0.1 getestet habe.
Bei Linux ist /home/ ein gültiger Pfad.
Ich werd nun versuchen Java 8 und NetBeans 8 zu installieren.

Schöne Pfingsten
Michael

Hallo,

Hallo M.L.,
erst mal danke für die schnelle Antwort.
Ich hatte vergessen, dass ich mit Linux Mint und
Eclipse-Knepler bzw. NetBeans IDE 7.0.1 getestet habe.
Bei Linux ist /home/ ein gültiger Pfad.
Ich werd nun versuchen Java 8 und NetBeans 8 zu installieren.

MIt der Java Version hat das nichts zu tun, „getFileList“ gibt null zurück wenn das Verzeichnis nicht existiert oder eine IOException auftritt (http://docs.oracle.com/javase/8/docs/api/java/io/Fil… ). Das ist auch der Fall wenn Leseberechtigung fehlt.

getPaths(/tmp)
 can read: true
getPaths(/tmp/launch-xBHNt2)
 can read: true
getPaths(/tmp/launchd-10958.PNkgRJ)
 can read: false
Exception in thread "main" java.lang.NullPointerException
 at VerzeichnisDurchsuchen.getPaths(VerzeichnisDurchsuchen.java:26)

Hatte den Code etwas gesprächiger gemacht:

 private static ArrayList getPaths(File file, ArrayList list) {
 System.out.println("getPaths(" + file + ")");
 System.out.println(" can read: " + file.canRead());
 if (file == null || list == null || !file.isDirectory())
 return null;
 File[] fileArr = file.listFiles();
 for (File f : fileArr) {
 if (f.isDirectory()) {
 getPaths(f, list);
 }
 list.add(f);
 }
 return list;

Zeilel 26 ist for (File f : fileArr) {, das wirft eine NullPointerException wenn listFiles null zurückgegeben hat.

Also entweder davor prüfen, ob das Verzeichnis lesbar ist, oder for der Schleife auf null prüfen.

HTH
Heavy

listFiles, nicht getFileList

„getFileList“ gibt
null zurück

gemeint war natürlich „listFiles“.

Hallo Heavy

nach endlosem Debugging hab ich nun das Problem gefunden. Bei Linux scheint es auch Endlos-Pfade zu geben !??? Dies überfordert dann die Verzeichnis-Auflistung.

Gruß Michael

Beispiel:
/usr/share/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode/recovery-mode usw…