Tengo el siguiente código intentando leer un archivo de propiedades:
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
Recibo una excepción en la última línea. Específicamente:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
gracias, Nikos
java
properties
nikos
fuente
fuente
getResourceAsStream
busca el archivo en la ruta de clases. Si su archivo de propiedades está en el directorio del paquetemyPackage
, utilícelo/myPackage/myProp.properties
como ruta.conf
paquete para almacenar todos mis archivos de configuración y mi jerarquía de archivos es:,myproject ->src, conf, test
cómo voy a cargar las propiedades agregando una barra anterior?Puede encontrar información en esta página:
http://www.mkyong.com/java/java-properties-file-examples/
fuente
Reader
inprop.load(reader)
, según la documentación:The specified stream remains open after this method returns
Puede usar
ResourceBundle
class para leer el archivo de propiedades.fuente
conf/filename.properties
base en el directorio raíz del proyectofuente
No puede usar esta palabra clave como:
en un contexto estático.
Lo mejor sería hacerse con el contexto de la aplicación como:
luego puede cargar el archivo de recursos desde la ruta de clase -
Esto funcionará tanto para contextos estáticos como no estáticos y la mejor parte es que este archivo de propiedades puede estar en cualquier paquete / carpeta incluido en la ruta de clases de la aplicación.
fuente
Su archivo debe estar disponible como
com/example/foo/myProps.properties
classpath. Luego cárguelo como:fuente
si su config.properties no está en el directorio src / main / resource y está en el directorio raíz del proyecto, entonces debe hacer algo como a continuación:
fuente
Asegúrese de que el nombre del archivo sea correcto y que el archivo esté realmente en la ruta de clases.
getResourceAsStream()
devolverá nulo si este no es el caso que hace que la última línea arroje la excepción.Si myProp.properties está en el directorio raíz de su proyecto, utilice
/myProp.properties
en su lugar.fuente
Puede usar java.io.InputStream para leer el archivo como se muestra a continuación:
fuente
Dado el contexto, se
loader.getResourceAsStream("myPackage/myProp.properties")
debe utilizar.Liderar
'/'
no funciona con elClassLoader.getResourceAsStream(String)
método.Alternativamente, puede usar el
Class.getResourceAsStream(String)
método, que se usa'/'
para determinar si la ruta es absoluta o relativa a la ubicación de la clase.Ejemplos:
fuente
Si la ruta del archivo de propiedades y la ruta de clases de Java son las mismas, entonces debería hacerlo.
Por ejemplo:
fuente
Ninguna de las respuestas actuales muestra que se
InputStream
está cerrando (esto filtrará un descriptor de archivo) y / o no se ocupa de.getResourceAsStream()
devolver un valor nulo cuando no se encuentra el recurso (esto conducirá a unNullPointerException
mensaje confuso"inStream parameter is null"
). Necesita algo como lo siguiente:fuente
Para el archivo de propiedades de lectura con su orden original:
fuente
Muchas respuestas aquí describen métodos peligrosos en los que crean una instancia de un flujo de entrada de archivo pero no obtienen una referencia al flujo de entrada para cerrar el flujo más tarde. Esto da como resultado flujos de entrada colgantes y pérdidas de memoria. La forma correcta de cargar las propiedades debería ser similar a la siguiente:
Tenga en cuenta la instanciación del flujo de entrada del archivo en
try-with-resources
bloque. DadoFileInputStream
que a se puede cerrar automáticamente, se cerrará automáticamente después detry-with-resources
salir del bloque. Si desea usar untry
bloque simple , debe cerrarlo explícitamente usandofis.close();
en elfinally
bloque.fuente
Veo que la pregunta es antigua. Si alguien se encuentra con esto en el futuro, creo que esta es una forma sencilla de hacerlo. Mantenga el archivo de propiedades en la carpeta de su proyecto.
fuente
Especifique la ruta a partir de src como se muestra a continuación:
fuente