2010-06-23 24 views
30

En mi proyecto Maven, tengo el siguiente código en el método principal:¿Cuál es la ruta a los archivos de recursos en un proyecto Maven?

FileInputStream in = new FileInputStream("database.properties"); 

pero siempre obtener un archivo no se encuentra el error.

He puesto el archivo en src/main/resources y está correctamente copiado en el directorio target/classes (creo que es el comportamiento esperado para los recursos de Maven) pero al ejecutar realmente el programa parece que nunca puede encontrar el archivo. He intentado varias otras rutas:

FileInputStream in = new FileInputStream("./database.properties"); 
FileInputStream in = new FileInputStream("resources/database.properties"); 

etc. pero nada parece funcionar.

Entonces, ¿cuál es el camino correcto para usar?


Basado en "disown de" responder a continuación, aquí era lo que necesitaba:

InputStream in = TestDB.class.getResourceAsStream("/database.properties") 

donde TestDB es el nombre de la clase.

Gracias por su ayuda, ¡deshereda!

Respuesta

51

No puede cargar el archivo directamente así, necesita usar la abstracción de recursos (un recurso no solo podría estar en el sistema de archivos, sino en cualquier lugar de la ruta de clases, en un archivo jar u otro). Esta abstracción es lo que necesita usar cuando carga recursos. caminos de recursos son en relación con la ubicación de su archivo de clase, por lo que necesita para anteponer una barra para llegar a la 'raíz':

InputStream in = getClass().getResourceAsStream("/database.properties"); 
+0

Si usted está tratando de acceder al archivo de un método estático, getClass() no funciona ¿Hay una alternativa en ese caso? – acarlow

+4

Utilice el nombre de clase, por ejemplo Main.class.getResourceAsStream(). Puede usar cualquier clase o cargador de clases, por lo que hread.getContextClassLoader(). GetResourceAsStream() también funciona. –

Cuestiones relacionadas