2012-05-04 17 views
6

Eventuali duplicati:
Java resource as fileTra cui un file di testo all'interno di un file jar e la lettura

Sono genere di nuovo a Java e sto cercando di ottenere un file di testo all'interno di una File jar

Nel momento in cui eseguo il mio jar, devo avere il mio file di testo nella stessa cartella del file jar. Se il file di testo non è presente, otterrò uno NullPointerException, che voglio evitare.

Quello che voglio fare è ottenere il file txt all'interno del contenitore in modo da non avere questo problema. Ho provato alcune guide ma non sembravano funzionare. La mia funzione di lettura corrente è la seguente:

public static HashSet<String> readDictionary() 
{ 
    HashSet<String> toRet = new HashSet<>(); 
    try 
    { 
      // Open the file that is the first 
      // command line parameter 
      FileInputStream fstream = new FileInputStream("Dictionary.txt"); 
     try (DataInputStream in = new DataInputStream(fstream)) { 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String strLine; 
      //Read File Line By Line 
      while ((strLine = br.readLine()) != null) { 
      // Read Lines 
       toRet.add(strLine); 
      } 
     } 
      return toRet; 
    } 
    catch (Exception e) 
    {//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
    } 
    return null; 
} 

risposta

7

Non cercare di trovare un file come "file" in un file Jar. Usa invece le risorse.

Ottenere un riferimento al caricatore classe o classe e quindi alla chiamata del caricatore classe o classe getResourceAsStream(/* resource address */);.

Dovresti anche lavorare sulle tue capacità di ricerca, poiché questo è stato chiesto e risposto qui innumerevoli volte. In effetti dovremmo probabilmente chiudere questa domanda perché non la vedo aggiungere alle discussioni già presenti su SO.

2

sembra un esatto duplicato di questa domanda: How do I access a config file inside the jar?

seguito al tuo problema con NullPointerException, io non suggerisco di fare in modo che non accada, ma piuttosto prepararsi a essa e gestirlo correttamente. Vorrei andare ancora oltre per chiederti di sempre controllare le tue variabili per il valore nullo, è una buona cosa da fare.

3
// add a leading slash to indicate 'search from the root of the class-path' 
URL urlToDictionary = this.getClass().getResource("/" + "Dictionary.txt"); 
InputStream stream = urlToDictionary.openStream(); 

Vedere anche this answer.