2011-07-14 31 views
6

Tengo un archivo de propiedades que está dentro de un paquete predeterminado y la clase en la que estoy usando el archivo de propiedades también está en el mismo paquete predeterminado. Si utilizo solo el nombre de archivo sin ninguna ruta, recibo un error. Obviamente, eso no es correcto ya que debería dar algún tipo de ruta para referirme al archivo tat. Construiré la aplicación, la convertiré en un archivo jar, así que, ¿cómo debo dar la ruta, ya que el archivo de propiedades debe ir dentro de ese archivo jar? Estoy usando Netbeans IDE.Ruta del archivo de propiedades en java

EDITAR

Properties pro = new Properties(); 

    try {    
     pro.load(new FileInputStream("pos_config.properties")); 
     pro.setProperty("pos_id", "2"); 
     pro.setProperty("shop_type", "2"); 
     pro.store(new FileOutputStream("pos_config.properties"), null); 
     String pos_id = pro.getProperty("pos_id"); 
     if(pos_id.equals("")){ 
      pos_id="0" ; 
     } 
     global_variables.station_id = Integer.parseInt(pos_id); 
     String shop_type = pro.getProperty("shop_type"); 
     if(shop_type.equals("")){ 
      shop_type="0" ; 
     } 
     global_variables.shop_type = Integer.parseInt(shop_type); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
+0

Publique el código que está utilizando para acceder al archivo de propiedades. – mre

+0

@ little bunny foo foo: Verifique mi edición ... – Deepak

+0

No uso netbeans pero si hace clic derecho en el archivo en netbeans, no tiene algo como 'build path> include' – talnicolas

Respuesta

9

Uso getClass().getResourceAsStream("foo.properties")

Pero tenga en cuenta que el uso del paquete por defecto no se recomienda (lo anterior funcionará con cualquier paquete).

Su código no funciona porque el FileInputStream(..) utiliza rutas relativas al directorio de usuario actual (consulte la documentación java.io.File). Por lo tanto, busca foo.properties en /home/usr/ o c:\documents and settings\usr. Como su archivo .properties se encuentra en classpath, puede leerlo como tal, a través del método Class.getResourceAsStream(..).

4

¿Está tratando de obtener el archivo de propiedades del directorio de trabajo actual o está tratando de obtenerlo como recurso? Parece que deberías estar usando.

InputStream is = getClass().getResourceAsStream(filename); 
properties.load(is); 

Para cargar un archivo desde el directorio actual

properties.load(new FileInputStream(filename)); 

Mi conjetura es lo que realmente quiere es esto.

try {    
    Properties pro = new Properties(); 
    pro.load(new FileInputStream("pos_config.properties")); 
    String pos_id = pro.getProperty("pos_id"); 
    try { 
     global_variables.station_id = Integer.parseInt(pos_id); 
    } catch(Exception e) { 
     global_variables.station_id = 0; 
    } 
    String shop_type = pro.getProperty("shop_type"); 
    try { 
     global_variables.shop_type = Integer.parseInt(shop_type); 
    } catch(Exception e) { 
     global_variables.shop_type = 0; 
    } 
} catch (IOException ex) { 
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

sí, estoy tratando de obtenerlo del directorio actual. y estoy obteniendo en público static void main() Entonces, ¿cómo puedo usar este método no estático en contexto estático? – Deepak

+0

Cuando utiliza la referencia 'properties' puede usar los métodos no estáticos de las Propiedades –

+0

getResourceAsInputStream() -> getResourceAsStream() –

3

De todos modos recomiendo poner todos los archivos de propiedades en una carpeta de recursos.

En Eclipse puede crear una carpeta de origen con:

Haga clic derecho -> Nuevo -> Carpeta de origen

apuesto a que hay algo similar en Netbeans. Coloque todo su archivo de propiedad allí. Más tarde se puede acceder a ellos con el siguiente código:

AnyClass.class.getResource("/image.png") 

Así que para su problema específico que podría acceder a él de esa manera:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties"))); 
6

Como otros han indicado, debe cargarlo desde el classpath en lugar de como un archivo si desea poder cargarlo desde un jar. Desea el método Class.getResourceAsStream() o el método ClassLoader.getResourceAsStream(). Sin embargo, usar getClass().getResourceAsStream("pos_config.properties") es peligroso porque está utilizando una ruta que se resuelve en relación con la clase determinada, y una subclase podría cambiar la ubicación en la que se resuelve.Por lo tanto, es más seguro para nombrar una ruta absoluta dentro del frasco:

getClass().getResourceAsStream("/pos_config.properties") 

o mejor aún, utilizar una clase de literal en lugar de getClass():

Foo.class.getResourceAsStream("pos_config.properties") 
0

Esto no compilará:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties"))); 

El uso apropiado:

pro.load(YourClass.class.getResourceAsStream("/pos_config.properties"))); 
2

En un método estático, uso

ClassLoader.getSystemResourceAsStream ("name.properties");

Cuestiones relacionadas