2012-05-04 10 views
6

Duplicar posibles:
Java resource as fileLa inclusión de un archivo de texto dentro de un archivo JAR y leerlo

estoy especie de nuevo a Java y yo estoy tratando de conseguir un archivo de texto dentro de una Jar archivo.

En el momento en que ejecuto mi jar tengo que tener mi archivo de texto en la misma carpeta que el jar fil. Si el archivo de texto no está allí, obtendré un NullPointerException, que quiero evitar.

Lo que quiero hacer es obtener el archivo txt dentro del contenedor para no tener este problema. Probé algunas guías pero no parecían funcionar. Mi función de lectura actual es la siguiente:

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; 
} 

Respuesta

7

No intente encontrar un archivo como un "archivo" en un archivo Jar. Use recursos en su lugar.

Obtenga una referencia a la clase o al cargador de clases y luego a la clase o al cargador de clases, llame al getResourceAsStream(/* resource address */);.

También debe trabajar en sus habilidades de búsqueda, ya que esto se ha preguntado y respondido aquí en innumerables ocasiones. De hecho, probablemente deberíamos cerrar esta pregunta ya que no creo que se agregue a discusiones ya presentes en SO.

2

que parece ser un duplicado exacto de esta pregunta: How do I access a config file inside the jar?

En respuesta a su problema NullPointerException, sugiero no para asegurarse de que no suceda, sino prepararse para ella y manejarla adecuadamente. Iría aún más lejos para pedirle que siempre verifique sus variables para el valor nulo, es una buena cosa que hacer.

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(); 

Véase también this answer.

Cuestiones relacionadas