Foros del Web » Programación para mayores de 30 ;) » Java »

Duda al obtener resources con rutas relativas?

Estas en el tema de Duda al obtener resources con rutas relativas? en el foro de Java en Foros del Web. Hola que tal, hacia un tiempillo que no me pasaba por aca, resulta que vengo con un problemita que espero sea fácil de solucionar. El ...
  #1 (permalink)  
Antiguo 08/02/2013, 23:05
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Duda al obtener resources con rutas relativas?

Hola que tal, hacia un tiempillo que no me pasaba por aca, resulta que vengo con un problemita que espero sea fácil de solucionar. El problema es el siguiente, tengo que llenar unos JComboBox con unas opciones que vienen definidas en un archivo de texto, entonces básicamente lo que hago es abrir el fichero, recorrer las lineas e ir creando los ComboBoxes...

Estoy trabajando en NetBeans, lo que hice fue hacer un paquete resources, de manera que mi proyecto queda del tipo com.example.resources y dentro estan los ficheros de texto con la información, hasta ahora estando en otro paquete tipo com.example.otro uso el siguiente metodo para obtener el fichero:

Código Java:
Ver original
  1. this.getClass().getClassLoader().getResourceAsStream("resources/fichero.txt");

Posteriormente lo leo y asigno los valores al combo box, y funciona perfecto al ejecutar el proyecto en NetBeans, PERO una vez producido el .JAR (Generate and Build Project) y al ejecutarlo este no carga los valores para los ComboBoxes, hice pruebas y resulta ser que ahora el Stream me llega null, al abrir el .jar con winrar veo que si existe la ruta y los archivos, ya que se ve la ruta del tipo com/example/resources/fichero.txt, es decir el fichero existe y se incluye dentro del .jar pero no lo encuentra, cosa que desde netbeans funciona bien..

Como puedo solucionar esto? cabe destacar que necesito usar rutas relativas pues debe de funcionar independiente de SO en el que se ejecute, y hasta en una USB..

Agradesco cualquier ayuda!
__________________
De nada, hay te encargo +1...
  #2 (permalink)  
Antiguo 09/02/2013, 00:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Duda al obtener resources con rutas relativas?

Hola:

Si el recurso está dentro del jar, puedes usar rutas relativas o absolutas, puesto que estas últimas siempre empiezan en el principio del jar y no hacen en ningúan caso referencia al disco duro, al usb ni a nada.

Si obtienes el classloader de una clase, debes usar rutas relativas .. a donde esté ubicada esa clase dentro del jar. Para evitar esto, puedes poner un / delante, usando un path absoluto dentro del jar (en tu caso con una / delante getResourceAsStream("/resources/fichero.txt"); O en tu caso, si tu clase está en paquete, entonces igual tienes que poner getResourceAsStream("../resources/fichero.txt") para hacer que del directorio "paquete" nos vayamos al raíz.

Si obtienes el classloader de ClassLoader.getContextClassLoader(), entonces no es el classloader de una clase y los recursos se buscarán en el raíz del jar y no tienes que poner la / , pero el path será absoluto dentro del jar, es decir ClassLoader.getClassLoader().getResourceAsStream(" resources/fichero.txt");

http://micro-blog.chuidiang.org/cont...sourceasstream

Cuando estás en netbeans lo encuentra porque si los classloader no lo encuentran siempre se acaba llamando al SystemClassLoader que busca en los directorios normales del disco y cuando corres en netbeans, el resources no está metido en un jar, sino en el disco duro como un fichero normal dentro del classpath y el system class loader lo encuentra.

http://www.techdarwinia.com/java-cla...xt-classloader

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 09/02/2013, 08:59
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
De acuerdo Respuesta: Duda al obtener resources con rutas relativas?

Hola,

Adicionalmente cuando se ejecuta el JAR desde NetBeans se ejecuta en el directorio raíz del proyecto por eso encuentra el archivo en ${project}/resources. Posiblemente usas Maven y por eso tienes el archivo en el directorio resources.

Cuando Maven construye el proyecto copia todos los archivos que estan en resources dentro del JAR en el directorio raiz del mismo (aunque depende de la estructura del POM).

Si es así te debería funcionar de esta forma, sin cambiar el archivo de lugar:

.getResourceAsStream("fichero.txt")

Saludos,
  #4 (permalink)  
Antiguo 09/02/2013, 13:27
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: Duda al obtener resources con rutas relativas?

pues gracias por la ayuda, revise bien y resulta que siempre ha encontrado el archivo, aun que lo cambie a como me dijeron, el combo sigue sin mostrar nada, pero ya hice pruebas y si encuentra el archivo y si lo abre y lo lee, pero el contenido no lo muestra, como si el archivo estuviese vacío pero no lo esta!.

me quede ahora con algo así:
Código Java:
Ver original
  1. File lista = new File(Utils.class.getResource("/resources/Universidades.txt").getFile());
  2.  
  3. if (lista.exists()) //esto me da true, tanto en NetBeans como en el JAR
  4.                 JOptionPane.showMessageDialog(null, Utils.class.getResource("/resources/Universidades.txt").getFile());

Ese mensaje de JOptionPane, lo puse para ver lo que llegaba, en en NetBeans me da la ruta del archivo, pero en el JAR no me da nada, viene vacia eso, pero si esta entrando en el IF EXISTS!!

Que sucede?
__________________
De nada, hay te encargo +1...
  #5 (permalink)  
Antiguo 11/02/2013, 17:34
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: Duda al obtener resources con rutas relativas?

Alguna idea? como menciono si encuentra el File, y hace la lectura pero no muestra nada, ni si quiera la ruta del file pero el "ifExist(miFile)"si me da true, que pasa alli?
__________________
De nada, hay te encargo +1...
  #6 (permalink)  
Antiguo 11/02/2013, 23:25
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Duda al obtener resources con rutas relativas?

Por aquí dicen que no se puede usar getFile() con un fichero dentro del jar http://www.coderanch.com/t/533586/ja...jar-Class-Path ...

La API no pone nada, deberías hacer algunas pruebas más para ver si es cierto.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: netbeans, resources, rutas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:25.