Lesen einer Ressource mit BufferedReader
Ich versuche zu Lesen, eine Ressource, die aufgenommen werden, in eine .JAR, aber ich bekomme eine nullPointer
für die folgenden:
bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("resources/" + fileName)));
Mithilfe einer Datei, jedoch funktioniert einwandfrei..
bReader = new BufferedReader(new FileReader(new File("resources/" + fileName)));
- Sie können drucken Sie den stack-trace des Fehlers bitte.
- Was ist der vollständig quelified Namen
this.getClass()
, und wo ist die Datei in die jar? - Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException bei java.io.Reader.<init>(Reader.java:61) at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Ihre IDE-oder Maven-oder build-Prozess wird beinhalten Inhalte von "Ressourcen" in der jar-Datei im root, versuchen Sie finden es unter "/".
UPDATE:
Stellen Sie sicher, dass die "Ressourcen" - Ordner ist so konfiguriert, dass als Quell-Ordner.
Ist das ein Spring-framework-Projekt? Versuchen:
Ressource zu laden ist, sitzt in der src/main/resources directory:
Set "Ressourcen" - Ordner als Ressource-Ordner.
Versuchen Sie, diesen code:
Im Gegensatz zu
getClassLoader().getResourceAsStream(filename)
, die version, die Sie verwendengetClass().getResourceAsStream(filename)
verwendet einen relativen Pfad zu der Klasse location, eher als die classpath-root. Sie müssen entweder ein absoluter Pfad verwendet werdengetClass().getResourceAsStream("/" + filename)
oder verwenden Sie denClassLoader
version.Stellen Sie außerdem sicher, dass "Ressourcen" ist auf Ihrem classpath (falls Sie mit Maven sollte es sein, "src/main/resources" in Bezug auf Ihre pom.xml). Wenn dem so ist, müssen Sie nicht wirklich zählen "Ressourcen" in den Dateinamen, weil das ist die classpath-root.
Dies ist, weil der reader-Klasse und die Datei gelesen werden, sind in verschiedenen Paketen. Wenn
this.getClass().getRasourceAsStream("resource/file_name")
heißt, es wird eine Suche nach der Ressource-Verzeichnis in das Paket-Verzeichnis, wo die aktuelle reader-Klasse präsentiert, wenn gefunden, dann wird es Suche nach "Dateiname" - Datei. Also, wenn die Datei nicht vorhanden, wird null zurückgegeben.In diesem Fall müssen Sie wieder von aktuellen Datei-reader-Klasse-Verzeichnis entsprechend an und geben Sie den Pfad zu Ihrer Datei. Um aus einem Verzeichnis, das wir verwenden sollten
../
Beispielsweise, wenn
Reader-Klasse, Paket :
package com.abc.util;
Datei vorhanden in :
com.abc.template;
Dann sollten Sie rufen die
getResourceAsStream()
- Methode wie folgt.this.getClass().getResourceAsStream("resources/" + fileName)
lädt die Datei aus dem Klassenpfad alsnew File("resources/" + fileName)
lädt eine Datei von Ihrer Arbeit, die dir(dem Projekt-root-Verzeichnis in eclipse). Um die ehemaligen arbeiten, müssen Sie die jar-Datei, die mitresources
dir Ihren Klassenpfad ein.