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
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)
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.
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.
nach endlosem Debugging hab ich nun das Problem gefunden. Bei Linux scheint es auch Endlos-Pfade zu geben !??? Dies überfordert dann die Verzeichnis-Auflistung.