2011-10-10 48 views
7

Estoy desarrollando una aplicación que utiliza una biblioteca que carga un archivo de configuración como:¿Puede getResourceAsStream() encontrar archivos fuera del archivo jar?

InputStream in = getClass().getResourceAsStream(resource); 

Mi solicitud de entonces lleno en un archivo .jar. Si resource está dentro del archivo .jar, puedo especificar la ruta como "/relative/path/to/resource/resource".

Me gustaría saber si es posible encontrar el recurso si está fuera del archivo .jar, y en este caso, cómo debería especificar la ruta.

(Suponiendo que el jar de mi aplicación está en app/ y el recurso está en app/config).


El programa utiliza una biblioteca partido 3 rd. La biblioteca usa el recurso como un archivo de configuración.

También quiero ajustar el archivo de configuración sin tener que descomprimir/comprimir el archivo jar todo el tiempo.

+0

@AndrewThompson La biblioteca utiliza el recurso como un archivo de configuración (es una biblioteca de terceros). También quiero ajustar el archivo de configuración sin tener que descomprimir/comprimir el archivo jar todo el tiempo. En realidad, olvidé preguntar si podría lograr esto de otra manera :) – kunigami

+0

Esa información es relevante, así que la he editado en la pregunta. ¿Puede la API de terceros ser instruida (por ejemplo, por su aplicación) en cuanto a dónde buscar el recurso? Básicamente, a lo que me refiero es a sugerir no incluirlo en la aplicación. en absoluto, pero en una ruta estable y reproducible, como un subdirectorio de 'user.home'. –

+0

Acabo de notar el bit que dice 'applet'. ¿Es esto realmente un applet? Eso complica aún más las cosas. –

Respuesta

8

En general, sí puede. Técnicamente, el ClassLoader de la clase se usa para ubicar el recurso nombrado en el parámetro (see Javadoc here). Si no está usando un ClassLoader especial, obtendrá el cargador de clases de arranque, que busca en la ruta de la clase. Por lo tanto, si tiene directorios u otros archivos jar en classpath, se buscarán.

1

Obtendrá cualquier recurso que esté disponible para el cargador de clases apropiado (el que devolvería getClass().getClassLoader()). Si el cargador de clases incluye el directorio appy, los archivos jar dependen del resto del contexto de la aplicación.

0

Hay una manera de obtener el directorio actual (How to get the path of a running JAR file?), pero para la configuración que acaba puede aprobar una -Dconfig.location a la JVM se especifica una ruta absoluta para la configuración

Cuestiones relacionadas