2013-08-22 2 views
6

Al momento ho un progetto in Java istituito con la seguente struttura di directory in Eclipse:Java file come risorsa sempre quando è nella cartella del progetto

enter image description here

E nel mio codice ho le seguenti righe:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/config"); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 

Tuttavia, il InputStream is sempre viene assegnato ad nullo, che causa un crash quando si arriva alla seconda linea. So che ha qualcosa a che fare con il modo in cui ho impostato il percorso che sta cercando, ma non riesco a capire esattamente perché non funzioni.

+0

Make 'risorsa s' una cartella sorgente con Eclipse. –

+0

Quando esporto il codice finito come un jar eseguibile, causerà problemi con il tuo suggerimento? Fondamentalmente voglio essere in grado di modificare questa configurazione anche dopo che l'ho esportata come eseguibile. – user1806716

+1

@SotiriosDelimanolis quindi usa 'InputStream is = this.getClass(). GetClassLoader(). GetResourceAsStream ("/config ");' :) – Katona

risposta

9

Il file config è nel progetto, da qualche parte nel file system.

Tuttavia, Eclipse non lo sta posizionando sul classpath. Per forzarlo sul percorso di classe, fare clic con il pulsante destro del mouse sulla cartella e aggiungerla come cartella di origine. Eclipse lo aggiungerà quindi alla radice del classpath. È possibile recuperare con

InputStream is = this.getClass().getResourceAsStream("/config"); 

Eclipse mette tutto in cartella di origine resources partire dalla radice del classpath. Pertanto

resources/config

apparirà nel percorso di classe come

/config 
/qbooksprintfix/FileChecker 
/qbooksprintfxi/FilePurgeHandler 
/... 
+0

Quindi non posso avere risorse src AND come cartelle di origine? Separarli sarebbe l'ideale quindi posso modificare la configurazione più facilmente una volta esportata. – user1806716

+0

@ user1806716 È possibile averli entrambi (e più) come cartelle di origine. Se non vuoi che il tuo file sia root, puoi creare una seconda cartella 'resources' nella cartella' resources' originale come '/ resources/resources/config'. Il file sarebbe quindi accessibile come 'getResourceAsStream ("/resources/config ")'. Devi comunque creare quello originale una cartella 'source' sul percorso di creazione di Eclipse. Potresti voler esaminare Maven perché fa qualcosa di simile. –

+0

Ho impostato le risorse per essere una cartella src per il progetto e ho modificato la linea specificata (ora sta cercando "/ config") e lancia ancora puntatori nulli quando arriva alla riga bufferered =/ – user1806716

0

Prova di Pentecoste InputStream is = this.getClass().getClassLoader().getResource("/resources/config").openStream();

o InputStream is = this.getClass().getClassLoader().getResourceAsStream("/resources/config");

In entrambi i casi assicuratevi di mettere "/" prima delle "risorse"