2009-05-09 10 views
5

¿Es posible añadir un directorio relativo (es decir, foo/bar/plugh) a la ruta de clases Java y utilizarañadiendo directorio relativo a la ruta de clases de Java y el uso de cargador de clases(). GetResourceAsStream ("")

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); 

Para buscar foo/bar/plugh/xyzzy.properties?

Mi ruta de clases es el siguiente:

foo.jar;foo/bar/plugh;xyz.jar 

y soy capaz de utilizar las clases y los recursos de ambos frascos foo y XYZ, pero no desde el directorio plugh. En esos casos, in es siempre nulo.

No puedo hacer que esto funcione y no estoy seguro si esto no es compatible, me falta algo sutil o si estoy haciendo algo mal. ¿Debo usar una ruta absoluta?

+0

¿Cómo estableciste este classpath? Como el siguiente ejemplo? java-classpath foo.jar; foo/bar/plugh; xyz.jar –

Respuesta

6

Quizás estoy entendiendo mal lo que estás tratando de hacer, pero si tienes una carpeta en tu classpath, eso significa que todos los archivos debajo de ella también deberían estar en el classpath. De lo contrario, siempre puede pasar cada archivo .properties en la ruta de la clase.

Pero de cualquier manera, ya que el archivo/carpeta que contiene el archivo se encuentra en la ruta de clases, sólo debe ser capaz de hacer:

InputStream in = new FileInputStream("classpath:xyz.properties") 

Y como "foo/bar/plugh" se encuentra en la ruta de clases , uno de los lugares que buscará xyz.properties está en "foo/bar/plugh".

+0

Por alguna razón esto no funciona para mí cuando mi aplicación se ejecuta a través de una creación de archivo por lotes por codehaus maven appassmebler. Los caminos absolutos funcionan pero los relativos no. – sal

+2

Lo único que se me ocurre es si la ruta relativa que tiene en su classpath se está resolviendo en función de dónde se ejecuta el programa. Por ejemplo, si tengo el archivo por lotes en el directorio C: \ myapp \ bin, la ruta "base" podría ser C: \ myapp \ bin, no C: \ myapp. Si ese es el caso, intentaría resolver "C: \ myapp \ bin \ foo \ bar \ plugh \ xyz.properties". –

+0

Me funcionó con la ruta absoluta del directorio. Pero es muy extraño porque lo intenté antes con el código: InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); ¿Cuál es la diferencia entre estos dos métodos? Gracias. –

Cuestiones relacionadas