2013-03-03 17 views
8

Sto cercando di leggere una risorsa che verrà incluso in un .JAR, ma ottengo un nullpointer per i seguenti:Leggendo una risorsa con BufferedReader

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

Utilizzo di un file però, funziona benissimo ..

bReader = new BufferedReader(new FileReader(new File("resources/" + fileName))); 
+0

È possibile stampare la traccia di stack dell'errore, per favore. – christopher

+1

Qual è il nome completamente quelificato di 'this.getClass()', e dov'è il file nel barattolo? –

+0

Eccezione nel thread "AWT-EventQueue-0" java.lang.NullPointerException \t in java.io.Reader. (Reader.java:61) \t in java.io.InputStreamReader. (InputStreamReader.java:55) – Skogen

risposta

14

Assumendo che l'IDE o Maven o costruire processo includerà contenuti di "risorse" in vaso alla radice, prova a trovarlo in "/".

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

UPDATE:

assicurarsi che la cartella "Risorse" è configurata come una cartella di origine.

+0

Sto usando Eclipse e ottengo NullPointer quando lo eseguo in Eclipse. Il .jar non ha nulla a che fare con il problema, a parte il fatto che avrei usato l'esempio per un file, se non avessi intenzione di creare un .jar alla fine. – Skogen

+0

Posso trovare il file usando "/" se i file sono trascinati nella cartella del progetto, ma non possono essere trovati da un jar eseguibile. – Skogen

+0

@Skogen: vedere l'aggiornamento. – sgp15

-1

this.getClass().getResourceAsStream("resources/" + fileName) carica il file da classpath come new File("resources/" + fileName) carica il file dalla directory di lavoro (la dir radice del progetto in eclissi). Per far funzionare il primo, è necessario aggiungere il jar che contiene resources dir al classpath.

+0

nuovo file ("resources /" + fileName) non è workiong. – USer22999299

0

È un progetto quadro di primavera? Prova:

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

risorsa per caricare è seduto nella directory src/main/risorse:

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

0

Set "risorse" cartella come cartella delle risorse. Prova questo codice:

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

differenza getClassLoader().getResourceAsStream(filename), la versione che si sta utilizzando getClass().getResourceAsStream(filename) utilizza un percorso relativo alla posizione della classe, piuttosto che la radice classpath. È necessario utilizzare un percorso assoluto getClass().getResourceAsStream("/" + filename) o utilizzare la versione ClassLoader.

Inoltre, assicurarsi che "risorse" sia sul classpath (se si utilizza Maven, dovrebbe essere "src/main/resources" relativo al proprio pom.xml). In tal caso, non è necessario includere effettivamente "risorse" nel nome del file, poiché questa è la radice del percorso di classe.

Problemi correlati