MP3-Finder wirft NullPointerException

3quin0x

Mitglied
Hi,

folgendes Problem bei einer Hilfsklasse, zuerst der Code:
Java:
public static List<File> find(String start,String extPattern){
		List<File> files = new ArrayList<File>(16186);
		Stack<File> dirs = new Stack<File>();
		File startDir = new File(start);
		Pattern p = Pattern.compile(extPattern, Pattern.CASE_INSENSITIVE);
		
		if(startDir.isDirectory()) dirs.push(startDir);
		while(dirs.size()>0)
			for(File file:dirs.pop().listFiles())
				if(file.isDirectory()) dirs.push(file);
				else
					if(p.matcher(file.getName()).matches()) files.add(file);
		return files;
	}

Wenn ich als Startstring den Path /home/xxx/Dropbox angebe, funktioniert die Funktion und findet alle mp3-Dateien + alle,in deren Unterordnern. Gehe ich jetzt eine Stufe höher und möchte von /home/xxx alle MP3-Dateien suchen, dann bricht das Programm mit einer NullPointerException ab, weiss jemand woran das liegen könnte?

Gruß
 

turtle

Top Contributor
Ja, ein Objekt ist null!

Ist es zuviel verlangt, auch mal den Stacktrace zu posten?

PS: Die Implementierung der find.-Methode ist schlecht/unübersichtlich;)
 

3quin0x

Mitglied
Ja, ein Objekt ist null!

Ist es zuviel verlangt, auch mal den Stacktrace zu posten?
Meinst du das?
Code:
Exception in thread "main" java.lang.NullPointerException
	at MP3Finder.find(MP3Finder.java:17)
	at Test.main(Test.java:15)
PS: Die Implementierung der find.-Methode ist schlecht/unübersichtlich;)
Unübersichtlich ja, schlecht? Weil die Laufzeit quadratisch ist, oder wie meinen?
 

turtle

Top Contributor
Und was steht in Zeile 17 von MP3Finder?

Unübersichtlich meinte ich, dass das "besser" rekursiv gelöst werden könnte. Und warum nutzt Du nicht einen FileFilter, um die Liste der interessierenden Dateien zu erhalten?
 

3quin0x

Mitglied
Zeile 17 ist hier im Code Zeile 10 also :
Java:
if(file.isDirectory()) dirs.push(file);

Die Endausgabe filtere ich durch das Pattern, hier mal die Testklasse:

Java:
public static void main(String[] args) {
		String path = "/home";
		System.out.println("Suche in: " + path);
		List<File> files = MP3Finder.find(path, "(.*\\.mp3$)|(.*\\.wav$)");
		System.out.printf("Fand %d Datei%s.%n",files.size(),files.size()==1 ? "" : "en");
		for(File f:files) System.out.println(f.getAbsolutePath());
	}
 

turtle

Top Contributor
if(file.isDirectory()) dirs.push(file);

Das meinte ich auch mit unübersichtlich. Hier zum Beispiel weiss man nicht ob file oder dirs null ist, bei beiden würde es mit einer NPE knallen.

Besser wäre das in zwei Zeilen hinzuschreiben
Java:
if(file.isDirectory()) 
   dirs.push(file);

Das mit der regulären Expression habe ich schon verstanden, würde aber eine eigene FileFilter-Klasse schreiben, die halt "nur" *.mp3 bzw. *.wav Dateien "durchlässt".
 

3quin0x

Mitglied
Sorry, bin in der Zeile verrutscht. In der for-Schleife knallt es.

Java:
for(File file:dirs.pop().listFiles())
 
S

SlaterB

Gast
auch wieder eine zusammengesetze Zeile,
kann man ja machen, im Fehlerfall dann aber lieber auseinander,

was spricht von deiner Seite ganz explizit gegen Austausch dieser Zeile durch
Java:
System.out.println("Willkommen zum Code-Radio wiedereinmal in dieser langen Schleife, es geht um dirs, ist dirs null?: "+(dirs ==null));
if (dirs != null) {
  File p = file.pop();
  System.out.println("nun kommen wir zur spannenden pop()-Flanke, das Ergebnis ist p, null? "+(p==null));
  if (p != null) {
    List<Files> pl = p.listFiles();
    System.out.println("als nächstes pl: "+(pl==null));
    if (pl != null) {
      for(File file:pl) {
          System.out.println("pl-Schleife liefert als nächstes file: "+(file==null)); // kommt für NPE in der Ursprungszeile zwar nicht in Frage, aber in dem Stil weiter
          // restlicher Schleifencode

      }
   }
}
}
}
?
usw. oder ähnlich,
es ist nicht ausgeschlossen dass immer noch eine NPE auftritt, vielleicht macht pop() das intern wenn der Stack leer ist,
vielleicht macht listFiles() das für ein bestimmtes Verzeichnis,
man kann alles nur nach und nach herausfinden, aber zumindest auch bisschen mitarbeiten
 
Zuletzt bearbeitet von einem Moderator:
B

bygones

Gast
es ist nicht ausgeschlossen dass immer noch eine NPE auftritt, vielleicht macht pop() das intern wenn der Stack leer ist,
vielleicht macht listFiles() das für ein bestimmtes Verzeichnis,
man kann alles nur nach und nach herausfinden, aber zumindest auch bisschen mitarbeiten

Stack nicht (EmptyStackException) oder so - listFiles ja - wenn der pfad nicht gueltig ist
 

turtle

Top Contributor
Nachdem ich auf meinem Rechner die neueste JDK-version installiert habe, habe ich meine kleine Routine zum Finden von Dateien, die mit einer Extension enden, mal herausgesucht:

Java:
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

public class FindTree {

	public static void main(String[] args) {
		List<File> listFiles = new ArrayList<File>();
		find(listFiles, new File(args[0]), new ExtensionFilter(".png", ".wav"));
		for (File file : listFiles) {
			System.out.println(file.getAbsolutePath());
		}
	}

	public static void find(List<File> listFiles, File file,
			FileFilter fileFilter) {
		if (file != null) {
			if (file.isDirectory()) {
				File[] list = file.listFiles();
				for (File file2 : list) {
					find(listFiles, file2, fileFilter);
				}
			} else {
				if (fileFilter.accept(file))
					listFiles.add(file);
			}
		}
	}
}

class ExtensionFilter implements FileFilter {
	private String[] validExtensions;

	public ExtensionFilter(String... extensions) {
		validExtensions = new String[extensions.length];
		int i = 0;
		for (String etxension : extensions) {
			validExtensions[i++] = etxension;
		}
	}

	@Override
	public boolean accept(File pathname) {
		for (String extension : validExtensions) {
			if (pathname.getName().endsWith(extension))
				return true;
		}
		return false;
	}
}
 

3quin0x

Mitglied
@SlaterB hab mal deinen Code in meinen eingebaut, NPE tritt jetzt nicht mehr auf, aber er findet auch 0 Dateien (vom Home-Dir aus, wenn ich den Dropboxordner als Path angebe findet er die Dateien.

@turtle hab mal deinen Code eins zu eins kopiert und getestet, er macht exakt das selbe wie meiner, er findet alle Dateien in "home/xxx/Dropbox", verwende ich allerdings den Path "home/xxx" kommt auch bei deinem Code, bei mir, eine NPE.
 
S

SlaterB

Gast
> hab mal deinen Code in meinen eingebaut, NPE tritt jetzt nicht mehr auf, aber er findet auch 0 Dateien
dass bei exakt demselben Ablauf kaeine NPE mehr auftritt, spricht dafür dass irgendein if anspringt,

an den Ausgaben müsste ja erkennbar sein, wo kein null ist, evtl. zur besseren Übersicht das true/false nach vorne schreiben,
falls generell zu viele Ausgaben, dann die ifs wieder rausnehmen, es zur Exception kommen lassen und die letzten Meldungen davor anschauen,
irgendwas wird null liefern, und für diesen Spezialfall musst du eben reagieren
 
D

dieAntwort?!?

Gast
Treten bei versteckten Ordner nicht in der Regel auch NullpointerException auf?
Also wenn er auf diese Zugreifen will? Ich meine mich an sowas zu erinnern.

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
KilledByCheese Dezimal nach Hexadezimal rechner wirft seltsame exception Allgemeine Java-Themen 4
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
A Vererbung Klassen-Downcasting wirft ClassCastException Allgemeine Java-Themen 2
R ZIP FileSystem unter Windows wirft exception Allgemeine Java-Themen 7
N Methode wirft FatalError Allgemeine Java-Themen 2
J AudioClip wirft IllegalStateException Allgemeine Java-Themen 2
VfL_Freak ServerSocket wirft nicht immer eine BindException Allgemeine Java-Themen 21
M DefaultTableModel wirft beim Serialisieren Exception :-( Allgemeine Java-Themen 7
T getConstructor() wirft NoSuchMethodException . Allgemeine Java-Themen 7
M Iterator wirft Exception Allgemeine Java-Themen 10
F GregorianCalendar wirft keine Fehler bei z.b. Monat 17 Allgemeine Java-Themen 3
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
M Konstruktor, der Excpetions wirft Allgemeine Java-Themen 2
G POI wirft RecordFormatException Allgemeine Java-Themen 3
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
T imagej-server NullPointerException Allgemeine Java-Themen 1
L Methoden NullpointerException Allgemeine Java-Themen 5
B OOP Auslöser für NullPointerException Allgemeine Java-Themen 3
I Vererbung Nicht erklärliche NullPointerException Allgemeine Java-Themen 7
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
P wiedermal NullPointerException Allgemeine Java-Themen 2
kodela NullPointerException Allgemeine Java-Themen 2
L Variablen NullPointerException (RSA) Allgemeine Java-Themen 2
B NullPointerException bei @Inject JSF Allgemeine Java-Themen 0
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
G String an Arduino senden NullPointerException in PrintWriter Allgemeine Java-Themen 6
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
R NullPointerException Ohne Grund Allgemeine Java-Themen 5
D ByteBuffer getInt NullpointerException Allgemeine Java-Themen 4
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
T Compiler-Fehler NullpointerException! Allgemeine Java-Themen 7
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
L NullPointerException bei Instanzvarialen Allgemeine Java-Themen 3
B Compiler-Fehler NullPointerException beim Auslesen von .lang-Datei Allgemeine Java-Themen 3
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
H java.lang.NullPointerException Allgemeine Java-Themen 5
L Interpreter-Fehler java.lang.NullPointerException Allgemeine Java-Themen 17
M JSON NullPointerException Allgemeine Java-Themen 5
M NullpointerException Allgemeine Java-Themen 2
L Eclipse NullPointerException Allgemeine Java-Themen 6
M Fitness-Rechner: NullPointerException Allgemeine Java-Themen 7
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
K Unerklärliche nullpointerexception Allgemeine Java-Themen 6
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S javadoc java.lang.NullPointerException Allgemeine Java-Themen 2
K 3Dimensionales Feld - NullPointerException Allgemeine Java-Themen 2
J Compiler-Fehler NullPointerException Allgemeine Java-Themen 12
T Compiler-Fehler NullPointerException bei ADT LinkedTree Allgemeine Java-Themen 31
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
M NullPointerException MenuItem Allgemeine Java-Themen 7
S Dialog einblenden bei NullPointerException Allgemeine Java-Themen 5
T DefaultTableModel NullPointerException Allgemeine Java-Themen 7
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
B NullPointerException ohne Angabe Allgemeine Java-Themen 5
F NullPointerException aber warum ? Allgemeine Java-Themen 9
F Array NullPointerException Allgemeine Java-Themen 26
B NullPointerException bei Wertzuweisung Allgemeine Java-Themen 3
C NullPointerException Allgemeine Java-Themen 9
MonsterBit java.lang.NullPointerException Allgemeine Java-Themen 2
O NullPointerException (wohl Denkfehler) Allgemeine Java-Themen 5
N Warum nullPointerException? Allgemeine Java-Themen 13
N Generics-NullpointerException Allgemeine Java-Themen 7
J NullPointerException mit HashMap Allgemeine Java-Themen 2
B NullPointerException bei new XStream() Allgemeine Java-Themen 2
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
J NullPointerException bei JasperReports Allgemeine Java-Themen 2
V NullPointerException bei Vector Allgemeine Java-Themen 2
G Warum kommt hier NullPointerException? Allgemeine Java-Themen 3
G NullPointerException Allgemeine Java-Themen 5
R Immer wieder NullPointerException Allgemeine Java-Themen 2
M NullPointerException Allgemeine Java-Themen 4
J Fehler: java.lang.NullPointerException Allgemeine Java-Themen 2
G NullPointerException, aber warum? Allgemeine Java-Themen 10
G NullPointerException problem Allgemeine Java-Themen 30
mhauert NullPointerException bei Zugriff auf JNI Objekt Allgemeine Java-Themen 6
J Folgender Fehler: java.lang.NullPointerException Allgemeine Java-Themen 4
T NullPointerException nach Java Update Allgemeine Java-Themen 4
G NullPointerException Allgemeine Java-Themen 6
H NullPointerException trotz Abfangen von null? Allgemeine Java-Themen 9
H nullPointerException bei [ArrayList<String>.add(.)] Allgemeine Java-Themen 3
H NullPointerException Allgemeine Java-Themen 10
P NullPointerException Allgemeine Java-Themen 8
A NullPointerException, Thread soll Thread steuern Allgemeine Java-Themen 2
MQue Sichtbarkeit/HashMap/NullPointerexception Allgemeine Java-Themen 2
MQue NullPointerException Allgemeine Java-Themen 17
A NullPointerException Allgemeine Java-Themen 15
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben