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

¿Cómo apunto a un archivo que está en un .jar?

Estas en el tema de ¿Cómo apunto a un archivo que está en un .jar? en el foro de Java en Foros del Web. Hola muy buenas. Resulta que tengo un ejecutable .jar, el cual genera una interfaz grafica de usuario y la cual tiene un boton con la ...
  #1 (permalink)  
Antiguo 14/06/2010, 09:34
 
Fecha de Ingreso: agosto-2009
Mensajes: 38
Antigüedad: 10 años, 2 meses
Puntos: 1
¿Cómo apunto a un archivo que está en un .jar?

Hola muy buenas.
Resulta que tengo un ejecutable .jar, el cual genera una interfaz grafica de usuario y la cual tiene un boton con la función de abrir un .html, que no es más que la documentación javadoc de mis clases.
Trabajando en eclipse no tengo ningún problema, yo le indico en que ruta crear el File, y cuando ejecuto funciona sin problemas:
Código PHP:
File miDocu = new File ("doc/index.html");
Desktop.getDesktop().open(miDocu); 
Ahora bien, si yo dentro del .jar meto una carpeta con los .html, ¿cómo creo el File?¿cómo indico en mi clase que el fichero está dentro del jar ?

Espero que me hayáis entendido.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 15/06/2010, 10:58
Avatar de volmo9  
Fecha de Ingreso: enero-2010
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

A mi me paso algo parecido Alberto, intentaba cojer y modificar un properties y con un FileInputStream me daba un FileNotFoundException, pero con "getClass().getResourceAsStream" me funciono:

getClass().getResourceAsStream("/tu_archivo.html")


Lo lei aqui, por si necesitas mas información

http://www.velocityreviews.com/forums/t149161-jar-and-file-properties.html
  #3 (permalink)  
Antiguo 15/06/2010, 12:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 16 años, 1 mes
Puntos: 51
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

El navegador del S.O. no es capaz de abrir un fichero HTML dentro del .jar, así que no puedes empaquetar la ayuda HTML dentro del .jar.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 16/06/2010, 04:04
Avatar de volmo9  
Fecha de Ingreso: enero-2010
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Cita:
Iniciado por GreenEyed Ver Mensaje
El navegador del S.O. no es capaz de abrir un fichero HTML dentro del .jar, así que no puedes empaquetar la ayuda HTML dentro del .jar.

S!
Yo creo que con el:

getClass().getResourceAsStream("/tu_archivo.html")

Puedes cojer los html's y copiarlos a una ruta temporal, y abrirlos desde alli, tener que distribuir tu jar con html's aparte es una chapuza
  #5 (permalink)  
Antiguo 16/06/2010, 04:53
 
Fecha de Ingreso: agosto-2009
Mensajes: 38
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Gracias por las respuestas a ambos.
En caso de que fueran .pdf en vez de .html, lo que no entiendo es qué hacer con "getClass().getResourceAsStream("/tu_archivo.html")" Me devuelve un InputStream, pero, ¿qué hago con él para abrirlo?

He probado lo siguiente:
Código PHP:
File path = new File(getClass().getResource("/index.pdf").toURI());
Desktop.getDesktop().open(path); 
pero me da la siguiente exception:
Código PHP:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentExceptionURI is not hierarchical 
Un saludo y gracias de nuevo.
  #6 (permalink)  
Antiguo 16/06/2010, 05:05
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 16 años, 1 mes
Puntos: 51
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Cita:
Iniciado por volmo9 Ver Mensaje
Yo creo que con el:

getClass().getResourceAsStream("/tu_archivo.html")

Puedes cojer los html's y copiarlos a una ruta temporal, y abrirlos desde alli, tener que distribuir tu jar con html's aparte es una chapuza
Yo únicamente digo que "tal cual" no se puede hacer por que el S.O. no es capaz de leer un fichero dentro del .jar. Otra cosa son las soluciones alternativas que quieras buscar, como la de sacar los ficheros fuera del .jar en un directorio temporal y luego apuntar el navegador ahí, pero luego vas dejando "basurilla" en el ordenador del usuario.

Yo no veo realmente mucho problema en distribuir tu ayuda en ficheros html separados, ya que muchísimos programas se distribuyen de esta forma. Normalmente un .zip o similar que tiene varias cosas y entre ellas un binario (.jar en nuestro caso) y un directorio doc con la documentación, además del README, la licencia de uso... etc.

Para dejarlo "pofesioná", se puede usar el IzPack o similares para crear un instalador que te lo monte todo y te haga enlaces directos etc. Para distribución simple auto-contenida, un zip y listo.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 18/06/2010, 05:03
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Parece que la respuesta a la pregunta inicial no ha sido contestada. La clave para entencder la pregunta está en: En caso de que fueran .pdf en vez de .html, lo que no entiendo es qué hacer con "getClass().getResourceAsStream("/tu_archivo.html")" Me devuelve un InputStream, pero, ¿qué hago con él para abrirlo?
¿Que porqué lo sé?, porque yo tengo la misma pregunta.
Intento utilizar PDFRender para que abra y muestre archivos PDFs que están incrustados en un subdirectorio interno del .jar. Para utilizar un archivo según los ejemplos de esta librería (PDFRender) se utilizaría:

File file = new File("MiArchivo.pdf");
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0,channel.size());
PDFFile pdffile = new PDFFile(buf);


en definitiva, según el ejemplo necesito un objeto de la clase File para iniciar la creación de un objeto de la clase PDFFile.
Pero si utilizo archivos PDF internos en el jar, la forma de acceder es a traves de getResourceAsStream. Por lo tanto la pregunta es: ¿Como puedo incorporar el objeto inputstream obtenido con getResourceAsStream en el código anterior para que funcione?
  #8 (permalink)  
Antiguo 18/06/2010, 05:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 16 años, 1 mes
Puntos: 51
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

La pregunta inicial ha sido respondida y la respuesta es: no se puede.

Si tu caso es distinto, es mejor abrir otro tema para que la gente no se confunda y crea que este es parte de lo mismo.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 18/06/2010, 06:26
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

No me j..., GreenEyed, llevo mucho tiempo siguiéndote en varios foros como para esperar una respuesta mas constructiva.

De la pregunta original: "si yo dentro del .jar meto una carpeta con los ......, ¿cómo creo el File?" , es evidente que el concepto es el mismo con independencia de si son html, pdf , txt....

Pero quizás tengas razón y la idea se pueda entender diferente. Intentaré abrir otro tema con mi caso específicamente.

Un saludo
  #10 (permalink)  
Antiguo 18/06/2010, 07:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 16 años, 1 mes
Puntos: 51
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Lo que quería el autor originalmente es que el navegador del S.O. le encontrara un fichero HTML dentro de un .jar. Tu me estás hablando de que una librería Java encuentre el fichero dentro del .jar.
Son dos cosas totalmente distintas por que no es lo mismo un proceso externo a la JVM que una clase en la JVM. El primer caso no se puede hacer por que depende del proceso externo, el segundo es relativamente sencillo una vez le pillas el truco al getResourceAsStream.

Si me llevas siguiendo entonces sabes lo que pienso de la educación en los mensajes.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #11 (permalink)  
Antiguo 18/06/2010, 11:09
 
Fecha de Ingreso: agosto-2009
Mensajes: 38
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Yo creo que finalmente entregare un .rar y al descomprimirlo que aparezcan el .jar y la carpeta con los archivos de ayuda.

Gracias por vuestro tiempo.
Un saludo.
  #12 (permalink)  
Antiguo 09/07/2010, 07:45
Avatar de volmo9  
Fecha de Ingreso: enero-2010
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: ¿Cómo apunto a un archivo que está en un .jar?

Cita:
Iniciado por biomorfo Ver Mensaje
Parece que la respuesta a la pregunta inicial no ha sido contestada. La clave para entencder la pregunta está en: En caso de que fueran .pdf en vez de .html, lo que no entiendo es qué hacer con "getClass().getResourceAsStream("/tu_archivo.html")" Me devuelve un InputStream, pero, ¿qué hago con él para abrirlo?
¿Que porqué lo sé?, porque yo tengo la misma pregunta.
Intento utilizar PDFRender para que abra y muestre archivos PDFs que están incrustados en un subdirectorio interno del .jar. Para utilizar un archivo según los ejemplos de esta librería (PDFRender) se utilizaría:

File file = new File("MiArchivo.pdf");
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0,channel.size());
PDFFile pdffile = new PDFFile(buf);


en definitiva, según el ejemplo necesito un objeto de la clase File para iniciar la creación de un objeto de la clase PDFFile.
Pero si utilizo archivos PDF internos en el jar, la forma de acceder es a traves de getResourceAsStream. Por lo tanto la pregunta es: ¿Como puedo incorporar el objeto inputstream obtenido con getResourceAsStream en el código anterior para que funcione?
la pregunta inicial no ha sido contestada completamente ni tiene por que ser contestada, no estamos aqui para escribirte el codigo por completo chaval, quien te crees? da gracias a las partes del codigo que te dan

Etiquetas: jar
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 23:15.