2013-03-03 6 views
8

Ich versuche, eine Ressource zu lesen, die in eine .JAR aufgenommen werden, aber ich erhalte eine Nullpointer nach folgenden Kriterien:eine Ressource mit BufferedReader Lesen

bReader = new BufferedReader(new InputStreamReader(
        this.getClass().getResourceAsStream("resources/" + fileName))); 

eine Datei jedoch verwenden, funktioniert gut ..

+0

Können Sie bitte den Stack-Trace des Fehlers ausdrucken. – christopher

+1

Was ist der vollständig quelifizierte Name von 'this.getClass()', und wo ist die Datei im Jar? –

+0

Ausnahme im Thread "AWT-EventQueue-0" java.lang.NullPointerException \t bei java.io.Reader. (Reader.java:61) \t bei java.io.InputStreamReader. (InputStreamReader.java:55) – Skogen

Antwort

14

Angenommen, Ihr IDE- oder Maven- oder Build-Prozess enthält den Inhalt von "Ressourcen" in Jar bei root, versuchen Sie es bei "/" zu finden.

bReader = new BufferedReader(new InputStreamReader(
          this.getClass().getResourceAsStream("/" + fileName))); 

UPDATE:

Stellen Sie sicher, die "Ressourcen" Ordner als Quellordner konfiguriert ist.

+0

Ich benutze Eclipse, und ich bekomme den NullPointer, wenn ich es in Eclipse ausführe. Die .jar-Datei hat nichts mit dem Problem zu tun, abgesehen von der Tatsache, dass ich das Beispiel für eine Datei verwendet hätte, wenn am Ende keine Pläne für das Erstellen einer .jar-Datei erstellt wurden. – Skogen

+0

Ich kann die Datei mit "/" finden, wenn die Dateien per Drag-Drop in den Projektordner gezogen werden, aber nicht in einem ausführbaren Jar gefunden werden können. – Skogen

+0

@Skogen: Siehe das Update. – sgp15

-1

this.getClass().getResourceAsStream("resources/" + fileName) lädt Datei aus Classpath als new File("resources/" + fileName) lädt Datei aus Ihrem Arbeitsverzeichnis (das Projekt Stammverzeichnis in Eclipse). Um das erstere zum Laufen zu bringen, müssen Sie das Glas mit dem Pfad resources zu Ihrem Klassenpfad hinzufügen.

+0

neue Datei ("resources /" + Dateiname) funktioniert nicht. – USer22999299

0

Ist dies ein Spring-Framework-Projekt? Versuchen:

BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream())); 

Ressource zu laden, wird im src/main/resources Verzeichnis sitzen:

Resource to load is sitting in the src/main/resources directory

0

Set "Ressourcen" Ordner als Ressourcenordner. Versuchen Sie diesen Code:

bReader = new BufferedReader(new 
     InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName))) 
0

Im Gegensatz zu getClassLoader().getResourceAsStream(filename), die Version, die Sie getClass().getResourceAsStream(filename) verwendet einen Pfad relativ zu der Klasse Standort verwenden, anstatt die Classpath Wurzel. Sie müssen entweder einen absoluten Pfad getClass().getResourceAsStream("/" + filename) verwenden oder die ClassLoader Version verwenden.

Vergewissern Sie sich auch, dass "Ressourcen" auf Ihrem Klassenpfad ist (wenn Sie Maven verwenden, sollte es "src/main/resources" relativ zu Ihrer pom.xml sein). Wenn dies der Fall ist, müssen Sie in Ihrem Dateinamen nicht unbedingt "Ressourcen" einschließen, da dies der Klassenpfadstamm ist.