Vous êtes sur la page 1sur 35

Como abrir archivos externos desde java

(doc,xls,pdf, txt...)

Muchas veces nos encontramos con la necesidad de abrir


documentos de Word, PDF, Excel u otro archivo de ofimática
directamente desde nuestra aplicación (Ojo, no cargarlo en
nuestra aplicación, sino ejecutarlo desde ella), ya sea para
modificarlo o simplemente revisar su contenido....

En esta entrada veremos de forma simple como realizar este


proceso, primero veremos la manera de ejecutarlo desde cualquier
carpeta de nuestro pc y luego cargándolo desde nuestro propio
proyecto......

Les mostrarè 2 formas de hacerlo, una


usando Runtime.getRuntime().exec("cmd /c start
"+"Ruta"); para sistemas Windows y luego al
final Desktop.getDesktop().open("Ruta"); para que sea
validado en otros Sistemas Operativos... (como actualizaciòn al
comentario de un usuario)

Para este ejemplo trabajaremos con un archivo de Excel, aunque


el proceso funciona igual con cualquier tipo de
archivo...........veamos.

Cargando Archivos desde el PC.

Para cargar archivos desde nuestro computador debemos conocer


exactamente la ubicación o ruta donde se encuentre.....
Posteriormente creamos un proyecto Java, para este ejemplo
crearemos una clase Principal que solo tendrá el método main(),
y se encargará de llamar a una clase Procesos que llama al
archivo que necesitamos abrir...

Clase Principal.
1 public class Principal {
2

3 public static void main(String[] args) {


4 Procesos misProcesos=new Procesos();

5 misProcesos.cargarArchivo();

6 }

}
7

Clase Procesos.
1 import java.io.IOException;

2
public class Procesos {
3

4
public void cargarArchivo() {
5
abrir();
6
}
7

8
private void abrir() {
9 //ruta del archivo en el pc
10 String file = new String("E:\\pruebaArchivo\\ArchivoPrueba.xlsx");
11

12 try{

13 //definiendo la ruta en la propiedad file

Runtime.getRuntime().exec("cmd /c start "+file);


14

15
}catch(IOException e){
16
e.printStackTrace();
17
}
18
}
19 }
20

21

Como vemos esta clase tiene un método abrir() donde creamos la


lógica que permite ejecutar el archivo, la ruta completa se
almacena en una variable String que luego será usada para
encontrarlo.....

Luego dentro de un try-catch usamos el llamado al archivo por


medio de Runtime.getRuntime().exec("cmd /c start
"+file); (Si no sabes que es Try- Catch revisa está entrada
sobre el manejo de excepciones en java).........ejecutamos
nuestra aplicación y listo!!!! inmediatamente se abre el archivo en
nuestro computador....

Cargando Archivos desde el src del


Proyecto.
Muchas veces queremos tener archivos definidos en nuestros
proyectos, puede ser un manual de usuario de la aplicación en
formato pdf o tal vez un documento sobre la licencia del sistema,
para esto podemos tener almacenado el archivo en un paquete del
proyecto como se ve aquí...

Como vemos tenemos las mismas clases solo que agregamos el


paquete y ahí el archivo prueba que estamos trabajando......
vamos a modificar el método abrir() de nuestra
clase Procesos para agregar la ruta del archivo....

Clase Procesos.
1 private void abrir() {

3 //ruta del archivo en el pc

//String file = new String("E:\\pruebaArchivo\\ArchivoPrueba.xlsx");


4

5
//rutal del archivo desde el src del proyecto
6
String fileLocal = new String("src/archivos/ArchivoPrueba.xlsx");
7
try{
8

9
Runtime.getRuntime().exec("cmd /c start "+fileLocal);
10

11
}catch(IOException e){
12 e.printStackTrace();
13 }

14 }
15

En este caso tan solo comentamos la variable file y le agregamos


una nueva variable llamada fileLocal que contendrá la ruta del
archivo en nuestro proyecto, cambiamos el llamado enviándole
al fileLocal y listo!!! cargamos el archivo de forma local.....

La otra alternativa mencionada es por medio


de Desktop.getDesktop().open("Ruta"); donde
practicamente es igual al proceso anterior, la diferencia es que
esta ultima opciòn es general cuando usamos un sistema operativo
diferente (en si, seria la mas recomendada) ya que la del
ejemplo gira mas en torno a sistemas windows...

1
private void abrir() {
2

3
//ruta del archivo en el pc
4
//String file = new String("E:\\pruebaArchivo\\ArchivoPrueba.xlsx");
5

6
//rutal del archivo desde el src del proyecto
7
String fileLocal = new String("src/archivos/ArchivoPrueba.xlsx");
8 try{
9

10 File path = new File (fileLocal);

11 Desktop.getDesktop().open(path);

12

13 }catch(IOException e){

e.printStackTrace();
14
}catch(IllegalArgumentException e){
15
JOptionPane.showMessageDialog(null, "No se pudo encontrar el archivo","Erro
16
e.printStackTrace();
17
}
18
}
19

Como vimos cargamos el archivo tambien de una forma


sencilla.....

También te podría Interesar.


 Videos CoDejaVu
 Ejemplo Look And Feel en Java
 Como Crear Interfaces Graficas en Eclipse
 Que es Java Swing?
 Herencia en Java.
 Ejemplo Modelo Vista Controlador.
 Que son los Patrones de Diseño ?
 Comparando Fechas En Java
 Tutorial Aplicaciones Web con Jboss Seam

¿Hay algo que quieras anexar o comentar sobre esta


entrada? no dudes en hacerlo.....y si te gustó...... te invito a
compartir y Suscribirte ingresando al botón "Participar en
este sitio" para darte cuenta de mas entradas como esta ;)

http://codejavu.blogspot.com/2014/10/como-abrir-archivos-externos-desde-java.html

Abrir una web desde Java


Publicado el agosto 1, 2011por franciscoguemes

1 URL url=null;

2 try {

3 url = new URL("https://franciscoguemes.wordpress.com/");

4 try {

5 Desktop.getDesktop().browse(url.toURI());

} catch (IOException e) {
6
7 e.printStackTrace();

8 } catch (URISyntaxException e) {

e.printStackTrace();
9

}
10
} catch (MalformedURLException e1) {
11
e1.printStackTrace();
12
}
13

En el ejemplo se abre la página principal de mi blog, por si quiere crear un


botón que abra mi blog en su programa xD.

https://franciscoguemes.wordpress.com/2011/08/01/abrir-una-web-desde-java/

¿Como ejecutar un programa externo desde


java?
Submitted by slayerlp on Dom, 09/04/2011 - 12:29

 Java Standard Edition

Hola he intentado ejecutar un programa externo desde java, por ejemplo, abrir una
navegador de internet con una pagina de internet como parametro. Lo he conseguido pero
solo en mi computadora. Dando el Path completo del navegador y aun lado la direccion como
parametro.
Pero como hacer que funcione en los demás PC's?
he intentado esto:
Runtime rt = Runtime.getRuntime();
String ruta="%PROGRAMFILES%\\Internet Explorer\\iexplore.exe";
Process proc = rt.exec("cmd -c "+ruta);

he incluso como:
cmd.exe + ruta
start + ruta
y nada.. alguien sabe como hacer esto?
Gracias de antemano
‹ Ayuda...Tiles en Struts2....warning en hibernate ›

 Inicie sesión o regístrese para enviar comentarios

Opciones de visualización de comentarios


Lista plana: expandida

Fecha: primero los más antiguos

50 comentarios por página

Guardar las opciones

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las
opciones» para activar los cambios.

No pongas 'cmd'...
Submitted by rodrigo salado anaya on Dom, 09/04/2011 - 13:32.

No pongas 'cmd'. Pon la ruta del *.exe y los parámetros que necesitas.
Todas la PC derivan de tener una referencia en la variable de entorno 'path' para que puedas
abrirlo sin problemas y no tener que poner la ruta completa.
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html
public static void main(String[] args) throws IOException {
Runtime.getRuntime().exec("C:/Program Files/Mozilla Firefox 4.0 Beta
4/firefox.exe javamexico.org");
}

 Inicie sesión o regístrese para enviar comentarios

Otra opcion
Submitted by skuarch on Lun, 09/05/2011 - 09:02.

si desea abrir el navegador puedes usar esto


String url = "http://www.google.com";
java.awt.Desktop.getDesktop().browse(java.net.URI.create(url));

tambien puedes usar esta opcion


URLDisplayer.getDefault().showURL(URL url);

 Inicie sesión o regístrese para enviar comentarios

¿Qué no es
Submitted by wishmaster77 on Lun, 09/05/2011 - 10:03.

¿Qué no es getDesktop().open() ?
Bueno, la diferencia entre tu código y el de Rodrigo es que el de él [Rodrigo] ejecuta un
proceso y el tuyo busca una tarea conocida por el escritorio. En el caso de tu código no
recuerdo si puedes ver mensajes enviados por la tarea que lanza el escritorio, en el código
de Rodrigo si puedes ver mensajes y demás que hace el proceso (mejor monitorización).

 Inicie sesión o regístrese para enviar comentarios

Muchas gracias
Submitted by slayerlp on Lun, 09/05/2011 - 17:44.

Muchas gracias, no conocia para nada la clase Desktop, gracias :D

Como Ejecutar un .exe en Java


Con el siguiente código que mostrare podrán ejecutar x archivo.exe que este ubicado
en la misma carpeta:
aqui el codigo

import java.io.InputStream;

import java.util.Scanner;

class Ya {

public static void main(String[] args) {

try {

System.out.println("Inicio del Programa");

//Nota aqui tendrian que asignarle el>

//nombre del programa a ejecutar

Process p = Runtime.getRuntime().exec("as.exe");

boolean no_exit = true;

while(no_exit){

try {

p.exitValue();

no_exit = false;
}catch(IllegalThreadStateException exception){

no_exit=true;

System.out.println("El programa aun no finaliza");

System.out.println("El programa finalizo");

/*Inicio de las acciones que siguen a la finalizacion del


exe*/

} catch (Exception e) {

e.printStackTrace();

}
abrir pdf desde jar
Estas en el tema de abrir pdf desde jar en el foro de Java en Foros del Web. Saludos, quiero abrir
un pdf al pulsar un enlace. En mi aplicacion me va bien, pero al crear un jar y abrirlo desde
cualquier ubicacion ...

#1 (permalink)

13/07/2010, 17:11

Fecha de Ingreso: marzo-2008

Mensajes: 19
alemag
Antigüedad: 9 años, 10 meses

Puntos: 0

abrir pdf desde jar

Saludos, quiero abrir un pdf al pulsar un enlace. En mi aplicacion me va bien, pero al crear un jar y
abrirlo desde cualquier ubicacion no me lo abre. Sera que no me lo encuentra, pero es que esas
carpetas estan el jar. No lo entiendo.
Mi codigo es este:

En mi proyecto esta:
C:\rpni\src y de ahi cuelgan varias carpetas, entre ellas varios paquetes y una que se llama
imagenes/iconos/miPdf.pdf (dentro de src).

Al crear el jar, con el boton derecho en build fat-jar y finalizar directamente, al abrirlo con el winzip
tengo las siguientes carpetas:
- src (dentro tiene tres carpetas, javax, com y .svn - nada que ver con lo mio)
- imagenes y dentro otra iconos y dentro el pdf
- tambien los paquetes que tenia yo dentro del src de mi proyecto en eclipse.

La instruccion con que lo llamo es:

File path = new File (Proyecto.class.getResource("imagenes/iconos/inria-RR-3449.pdf").toURI());


Y el jar lo ejecuto desde donde me lo crea (desde c:\rpni\ que es donde estan el bin y el src de mi
proyecto). Si lo ejecuto desde aqui mismo no va, desde ninguna ubicacion.

He probado todas las anteriores pero nada.


Y solo me queda hoy para solucionarlo.
por favor una ayudaa !!!
Muchas gracias.

#2 (permalink)

13/07/2010, 18:15

Fecha de Ingreso: mayo-2009


Xerelo Mensajes: 2.175
Antigüedad: 8 años, 8 meses

Puntos: 306

Respuesta: abrir pdf desde jar

El problema lo tienes porque dependiendo del sistema en el que lo estés ejecutando, el jar tomará
como directorio raíz uno distinto al suyo.

Échale un vistazo a esto

http://es.debugmodeon.com/articulo/o...cacion-en-java

Se puede hacer más sencillo, pero ahí está bastante bien explicado, a mí me sirvió.

O éste

http://www.forosdelweb.com/f45/como-...ta-jar-816164/

Última edición por Xerelo; 13/07/2010 a las 18:24

#3 (permalink)

13/07/2010, 19:39

Fecha de Ingreso: noviembre-2009

Ubicación: Bolivia

jcMouse Mensajes: 116

Antigüedad: 8 años, 2 meses

Puntos: 9

Respuesta: abrir pdf desde jar

al crear un JAR que contenga tus archivos como imagenes, sonido y en este caso un archivo PDF,
cuando los llamas con

File path = new File (Proyecto.class.getResource("imagenes/iconos/inria-RR-3449.pdf").toURI());

la direccion que te devuelve no es la misma que la que obtienes al ejecutar la aplicacion desde el IDE,
por ejemplo, desde el IDE obtienes algo como:

c:\rpni\src\imagenes\iconos\inria-RR-3449.pdf

pero cuando ya tienes el JAR creado y lo ejecutas, la ruta de los recursos que tienes dentro el JAR
cambia, por ejemplo:

c:\carpeta_donde_tienes_el_jat\TUARCHIVOJAR.JAR!\imagenes\iconos\inria-RR-3449.pdf
esa es la razon por la cual no puedes leer el PDF

__________________
Problem?
Estoy aquí
Foro Code Army

#4 (permalink)

14/07/2010, 03:10

Fecha de Ingreso: marzo-2008

Mensajes: 19
alemag
Antigüedad: 9 años, 10 meses

Puntos: 0

Respuesta: abrir pdf desde jar

1 ) Para Xerelo , mas o menos me aclaro (la razon la entiendo, pero no el que hacer para solucionarlo).
Con los iconos gif no me pasaba eso, le pongo imagenes / iconos / nuevo.gif y me los muestra sin
problema.

No habria otra manera mas facil de hacerlo?? Si solo hay esta:

Que hay que meter ese metodo get dentro de mi clase ? Y luego para que me lo muestre desde mi
aplicacion y desde el jar que tengo que poner ? Es que ahora estoy bastante perdido.

2) para jcMouse

como tendria que hacer para que me acceda desde el jar entonces, es que no me cuadra:
c:\rpni \ rpni.jar \ imagenes \ iconos \ miPdf.pdf ..........

Por favor, una ultima ayuda.


Muchas gracias por las respuestas.

#5 (permalink)

14/07/2010, 04:34

Fecha de Ingreso: mayo-2009

Mensajes: 2.175
Xerelo
Antigüedad: 8 años, 8 meses

Puntos: 306
Respuesta: abrir pdf desde jar

Código:

//Obtener dirección absoluta del fichero de ejecución .class o .jar


private static String direcAbs() throws Exception{

/*La dirección recuperada tiene la forma


*? equivale a / o \ segun el S.O.
*Desde un jar=> java:file:?<direccion absoluta
jar>!<relativa del resource elegido dentro del jar>
*Desde class=>file:?<direccion absoluta resource> */

String res = "nombreClaseDentroDelJar.class";


String direcc =
Principal.class.getResource(res).toString();
//Separador de directorios del sistema
String sep = File.separator;

if (direcc.startsWith("jar:"))
direcc = direcc.substring(4,direcc.length() -
("!" + File.separator + res).length());

File fich = new File (new URL(direcc).toURI());

//Recorres la estructura hasta que estés en el


directorio que quieras
//Esta parte la modificas según tus necesidades
do {
fich = fich.getParentFile();
}while (fich.toString().endsWith("bin"));

return fich.toString()+ sep;


}
Éste lo utilicé para leer un txt que estaba en el mismo directorio del jar.

Suerte

#6 (permalink)

15/07/2010, 02:45

Fecha de Ingreso: marzo-2008

Mensajes: 19
alemag
Antigüedad: 9 años, 10 meses

Puntos: 0

Respuesta: abrir pdf desde jar

He conseguido que me muestre el pdf en otras rutas de mi ordenador, desde el escritorio, etc .. (al
abrirlo me lo abre como temp;miPdf.pdf) ... pero si lo ejecuto desde otro ordenador distinto no me lo
abre.
¿ Que tengo que tener en el otro ordenador la misma estructura de carpetas ? No se podria ejecutar
desde cualquier ruta ?

El codigo que le puse es:

try{
File directorio = new File("temp");
directorio.mkdirs();
directorio.setWritable(true);
String archivo = directorio.getCanonicalPath() + File.pathSeparator + "inria.pdf";
File temp = new File(archivo);
InputStream is = this.getClass().getResourceAsStream("/imagenes/inria.pdf");
FileOutputStream archivoDestino = new FileOutputStream(temp);
FileWriter fw = new FileWriter(temp);
byte[] buffer = new byte[512*1024];
int nbLectura;
while ((nbLectura = is.read(buffer)) != -1)
archivoDestino.write(buffer, 0, nbLectura);
//cierras el archivo,el inputS y el FileW
fw.close();
archivoDestino.close();
is.close();
Desktop.getDesktop().open(temp);
} catch (IOException ex) {
System.out.println("Problema al abrir el pdf");
}

Por favor, lo ultimo que estoy cerca y solo me queda hoy de plazo.
Muchas gracias !!!

#7 (permalink)

16/07/2010, 11:40

Fecha de Ingreso: marzo-2008

Mensajes: 19
alemag
Antigüedad: 9 años, 10 meses

Puntos: 0

Respuesta: abrir pdf desde jar

Lo que me hace por un lado, me lo deshace por el otro:

Dos cosas:

1- Ahora no me muestra las imagenes de la ayuda de la aplicacion que tengo en javahelp.

Tengo los ficheros de ayuda en c:\rpni\src\help\html\agregar.html


y las imagenes estan en c:\rpni\src\imagenes\ayuda\errores\error.gif

Dentro de agregar.html para acceder a las imagenes hago:


<img src="http://www.forosdelweb.com/f45/abrir-pdf-desde-jar-
824621/..\..\imagenes\ayuda\errores\cadRepetida.gif">

en mi aplicacion funciona, pero si hago un jar y lo ejecuto desde cualquier lado, incluso desde donde
me lo crea, en c:\rpni no se ve ninguna imagen.

¿Que puedo hacer?

2- Si hago el jar, el pdf se ve bien, pero si guardo ese jar en un cd y ejecuto el jar desde el cd (en e:), no
se ve el documento pdf. ¿Solo me funcionaria en cualquier unidad c o como lo puedo solucionar?

Lo que me imagino que intenta es crear ese archivo temporal, por lo que si lo hago desde un cd, nome
dejaria. ¿ Que otra opcion puedo hacer?

Por favorr, un cable !!!


Muchas gracias.

Última edición por alemag; 16/07/2010 a las 15:06

http://www.forosdelweb.com/f45/abrir-pdf-desde-jar-824621/
abrir pdf en un jar
Publicado por alemag (65 intervenciones) el 08/01/2010 13:16:43

Buenos días, quiero que al pulsar una opcion de un menu, me salga un pdf. Tengo este codigo

if (so.startsWith(new String("Windows")))

Runtime.getRuntime().exec("cmd /c start src/inria-RR-3449.pdf");

else Runtime.getRuntime().exec("/usr/mozilla/mozilla-bin ./src/inria-RR-3449.pdf");

pero si hago un jar (incluyendo todo, las imagenes, el pdf ...) y ejecuto ese jar en cualquier ordenador incluido el mio,

y no se muestra dicho pdf. Tienen que ser rutas relativas, y le pongo rutas relativas, e incluyo todas las carpetas tal y

como estan en mi jar. Pero nada. El pdf lo tengo en la siguiente estructura de carpetas que tengo para el proyecto:

Proyecto

bin

src . con los distintos paquetes que contienen los .java

Automata con ficheros .java

Proyecto , que tiene el java del main

utilidades, con mas ficheros .java

imagenes, con los iconos de la aplicacion, ventana splash

inria.pdf, el fichero que no me deja ver en otros ordenadores

Que estaria el problema en la ruta que le indico o algo ? He probado un monton de cosas, pero nada.

Lo mismo, me ocurre con una ventana splash, que se usan para presentación y a los 5 segundos, por ejemplo,

desaparece, pero tampoco me la muestra.

¿Qué es lo que falla? Muchas gracias.

Valora esta pregunta


0
Responder

Abrir PDF dentro de un JAR.


Publicado por Luis Roberto Pérez Rios luis.robertop87@gmail.com (1 intervención) el 18/12/2012 03:41:34

Lo que debes hacer es:

- Descomprimir el archivo PDF que esta dentro del JAR.

- Poner ese contenido en un archivo temporal.

- Guardar el archivo temporal.

- Abrir el Archivo Temporal.

Te mando un ejemplo, el metodo lo asigne a un botoncito hecho con Beans, ademas debes suponer que dentro del jar

tienes un directorio "/docs" y dentro de el un archivo "AGBase.pdf".

Espero te sirva de algo. (Si escribes a mi correo te mandare el proyecto hecho en NetBeans)

8
9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
try{

//Creamos un archivo en la carpeta temporal de tu sistema

operativo
File temp = new File(System.getProperty("java.io.tmpdir") +

"panchoTmp.pdf");

//Creamos un flujo de entrada al cual asignamos el valor del PDF

que esta dentro del JAR


InputStream flujoEntrada =

this.getClass().getResourceAsStream("/docs/AGBase.pdf");

//Creamos un flujo de salida para poder escribir sobre el archivo

temporal
FileOutputStream flujoSalida = new FileOutputStream(temp);

//Preparamos el temp para que se llene de la informacion de PDF

dentro del jar


FileWriter fw = new FileWriter(temp);

//Creamos un arreglo de bytes generico que soporte un gran tamano

1KB * 512 B --> se usa para todo tipo de archivo


byte[] buffer = new byte[1024*512];

int control; //para contar posiciones de byte

//Mientras haya bytes por leer se ejecuta este bucle


while ((control = flujoEntrada.read(buffer)) != -1){
flujoSalida.write(buffer, 0, control);

//Cerramos y guardamos el archivo creado


fw.close();

flujoSalida.close();

flujoEntrada.close();

//Ahora ya tenemos en temp todo tu PDF descomprimido y lo podemos

abrir
Desktop.getDesktop().open(temp);

} catch (IOException ex) {

JOptionPane.showMessageDialog(this, "Ocurrio el siguiente


problema: \n" + ex.getMessage());
}

//MUAJAJAJA
}
Valora esta respuesta

0
Comentar

Abrir PDF dentro de un JAR.


Publicado por Juan (1 intervención) el 29/11/2016 00:30:16

Hola amigo..se que este tema es viejo, pero me encuentro frente al mismo problema...copie tu codigo en un boton

para activar un archivo , al correrlo en netbeans no funciona, o se a no logro abrir el archivo....la pregunta es...si
genero el jar...ahi si debiese funcionar cierto?...si esta todo biem, saludos y gracias

https://www.lawebdelprogramador.com/foros/Java/1172605-abrir-pdf-en-un-jar.html
¿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)

14/06/2010, 09:34

Fecha de Ingreso: agosto-2009

Mensajes: 38
albertito87
Antigüedad: 8 años, 5 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)

15/06/2010, 10:58

Fecha de Ingreso: enero-2010

Mensajes: 10
volmo9
Antigüedad: 8 años

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)

15/06/2010, 12:03

Fecha de Ingreso: octubre-2003

Mensajes: 3.578
GreenEyed
Antigüedad: 14 años, 3 meses

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)

16/06/2010, 04:04

Fecha de Ingreso: enero-2010

Mensajes: 10
volmo9
Antigüedad: 8 años

Puntos: 0

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

Cita:

Iniciado por GreenEyed

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)

16/06/2010, 04:53

Fecha de Ingreso: agosto-2009

Mensajes: 38
albertito87
Antigüedad: 8 años, 5 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.IllegalArgumentException: URI is not hierarchical

Un saludo y gracias de nuevo.

#6 (permalink)

16/06/2010, 05:05

Fecha de Ingreso: octubre-2003

Mensajes: 3.578
GreenEyed
Antigüedad: 14 años, 3 meses

Puntos: 51

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

Cita:
Iniciado por volmo9

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)

18/06/2010, 05:03

Fecha de Ingreso: junio-2010

Mensajes: 3
biomorfo
Antigüedad: 7 años, 7 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)

18/06/2010, 05:49

Fecha de Ingreso: octubre-2003

Mensajes: 3.578
GreenEyed
Antigüedad: 14 años, 3 meses

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)

18/06/2010, 06:26

Fecha de Ingreso: junio-2010

Mensajes: 3
biomorfo
Antigüedad: 7 años, 7 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)

18/06/2010, 07:28

Fecha de Ingreso: octubre-2003

Mensajes: 3.578
GreenEyed
Antigüedad: 14 años, 3 meses

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)

18/06/2010, 11:09

Fecha de Ingreso: agosto-2009

Mensajes: 38
albertito87
Antigüedad: 8 años, 5 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)

09/07/2010, 07:45
Fecha de Ingreso: enero-2010

Mensajes: 10
volmo9
Antigüedad: 8 años

Puntos: 0

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

Cita:

Iniciado por biomorfo

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

http://www.forosdelweb.com/f45/como-apunto-archivo-que-esta-jar-816164/
jar and file.properties
Discussion in 'Java' started by palmis, Jan 9, 2006.

1.
palmisGuest
I have created my jar file.
The main get some configuration value from a EIF.properties. This file
is contained into jar archive, but when I run my application, I receive
this error:

java.io.FileNotFoundException: EIF.properties (The system cannot find


the file s
pecified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:91
at java.io.FileInputStream.<init>(FileInputStream.java:54
at config.LoadProperties.load(LoadProperties.java:24)
at snmpManager.GetClass.main(GetClass.java:73)

Why?

Thanks
palmis, Jan 9, 2006

#1

1. Advertisements

2.
Guest
Hi,

it's difficult to say without the code.

1. Is the LoadProperties class in the jar? I think yes


2. is the properties-File in same package like the
LoadProperties-class?
3. You should use the getResourceAsStream-Method.

Similar to that:

public static void main(String[] args) {

InputStream in = this.getClass.getClassLoader("EIF.properties");
}

You can also use the getClass.getResourceAsStream, but if you use that,
the Loader will search the File in the Package (see also API for
Class.getResourceAsStream and Classloader.getResourceAsStream());

Greetings

Joe
, Jan 9, 2006

#2

1. Advertisements

3.
palmisGuest
Hi joe,

1. Yes

2. No,properties file is out of package of LoadProperties-class; but if


it run with eclipse, it function correctly!

3.this is code of LoadProperties-class

package config;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import snmpManager.GetClass;
import udp.SenderUdp;

public class LoadProperties {

public LoadProperties(){

public void load(){


Properties myProp = new Properties();
// load key-value pairs from a file
FileInputStream fis;
try {
fis = new FileInputStream("EIF.properties");
myProp.load(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

// Getting values from the loaded key-value pairs is done


// by calling getProperty on the Properties Object
String myPortAgent = "PORT_NUMBER_AGENT";
String myIpAddressAgent = "IPADDRESS_AGENT";
String myMibDirectoryAgent = "MIB_DIRECTORY";

String myPortUdp = "PORT_NUMBER_CCFH1";


String myIpAddressUdp = "IPADDRESS_CCFH1";
// Use this key to get the corres. value as a **String**
// if the key does not exist, myValue will be null
String myPortValue = myProp.getProperty(myPortAgent);
String myIpValue = myProp.getProperty(myIpAddressAgent);
String myMibValue = myProp.getProperty(myMibDirectoryAgent);
GetClass.setPort(myPortValue);
GetClass.setHost(myIpValue);
GetClass.setMib(myMibValue);

String myPortUdpValue = myProp.getProperty(myPortUdp);


String myIpUdpValue = myProp.getProperty(myIpAddressUdp);
SenderUdp.setPort(myPortUdpValue);
SenderUdp.setHost(myIpUdpValue);

}
}

what do you think?

thanks
palmis, Jan 9, 2006

#3
4.
Thomas FritschGuest
palmis said:

1. Yes

2. No,properties file is out of package of LoadProperties-class; but if


it run with eclipse, it function correctly!

3.this is code of LoadProperties-class


[...]

public void load(){


Properties myProp = new Properties();
// load key-value pairs from a file
FileInputStream fis;
try {
fis = new FileInputStream("EIF.properties");
myProp.load(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

You can't use FileInputStream, because that is usable only for plain files,
not for members inside a jar. (It works in eclipse, because eclipse loads
from the plain files, not from your jar file.)
As nikita777 (Joe) already said, use getResourceAsStream:
InputStream is;
try {
is = getClass().getResourceAsStream("/EIF.properties");
myProp.load(is);
} ...
Note especially the "/" in the path. You need it, because as you say your
properties file is out of any package in your jar file (i.e. it is in the
root directory inside the jar). See also
[...]

what do you think?


Thomas Fritsch, Jan 9, 2006

https://www.thecodingforums.com/threads/jar-and-file-properties.149161/
Error al abrir archivo pdf en un .jar (Read 1292 times)
hayner100
 Newbie


 Posts: 3
 Karma: 0

o

Error al abrir archivo pdf en un .jar


« on: Mayo 24, 2013, 02:23:42 am »

Hola tengo el siguiente problema estoy haciendo una aplicacion la cual con un boton me
abra cualquier archivo en este caso pdf cuando lo ejecuto en Netbeans funciona al
100% igualmente cuando ejecuto el .JAR pero al pasar todo el proyecto a otro pc y
ejecuto el .JAR no me funciona.
Obvio se que es porque cambia la ruta pero no se como solucionarlo

private void verpdfActionPerformed(java.awt.event.ActionEvent evt)


{

try{
File directorio=new File("temp");
directorio.mkdir();
directorio.setWritable(true);
String archivo=directorio.getCanonicalPath()+File.pathSeparator+"trafo
distribución.pdf";
File temp=new File(archivo);
InputStream is=this.getClass().getResourceAsStream("/archivos/documentos
tutoriales/trafo distribución.pdf");
FileOutputStream archivoDestino=new FileOutputStream(temp);
FileWriter fw=new FileWriter(temp);
byte[] buffer=new byte[512*1024];
int nbLectura;
while((nbLectura=is.read(buffer))!=-1)
archivoDestino.write(buffer,0,nbLectura);
fw.close();
archivoDestino.close();
is.close();
Desktop.getDesktop().open(temp);
}catch(IOException ex){
JOptionPane.showMessageDialog(null,"problema abriendo pdf");
}

Logged

chuidiang
 Administrator
 Hero Member


 Posts: 5427
 Karma: 12

o

Re: Error al abrir archivo pdf en un .jar


« Reply #1 on: Mayo 24, 2013, 02:48:44 am »

Puede ser cualquier cosa lo de "el .JAR no me funciona". Mejor si pones la excepción
que da si es que la da.

Si estás seguro que es por la ruta, es sencillo, cambia "/archivos/documentos


tutoriales/trafo distribución.pdf" por la ruta donde tengas ese pdf, o bien crea esa ruta
en el otro PC y pon el pdf ahí.

Se bueno.

Logged

http://www.chuidiang.org

http://blog.chuidiang.org

http://chuwiki.chuidiang.org

hayner100
 Newbie


 Posts: 3
 Karma: 0

o
Re: Error al abrir archivo pdf en un .jar
« Reply #2 on: Mayo 24, 2013, 03:24:03 am »

Disculpa no he sido claro osea al pasar todo el proyecto (incluye el archivo pdf) a otro
pc y al ejecutar el .JAR la aplicación me corre pero la orden del botón para ver el
archivo pdf no funciona.
El objetivo mio es que sin importar en que pc abra dicho .JAR siempre me funcione la
orden para ver el archivo pdf sin la necesidad de copiar dicho archivo ni mucho menos
tener que cambiar la ruta de origen del archivo
« Last Edit: Mayo 24, 2013, 03:27:45 am by hayner100 »

Logged

chuidiang
 Administrator
 Hero Member


 Posts: 5427
 Karma: 12

o

Re: Error al abrir archivo pdf en un .jar


« Reply #3 on: Mayo 24, 2013, 04:21:47 am »

Hola:

Si el pdf está dentro del jar, no puedes leerlo File/FileOutputStream normal, eso sólo
vale para ficheros normales en el disco.

Para leer un fichero dentro del jar puedes hacerlo con el ClassLoader y
getResourceAsStream, algo parecido a esto http://micro-
blog.chuidiang.org/content/classgetresourceasstream-vs-
classloadergetresourceasstream El método getResourceAsStream te devuelve el
InputStream del que leer.

Se bueno.

http://foro.chuidiang.org/java-j2se/error-al-abrir-archivo-pdf-en-un-jar/msg16703/#msg16703

Vous aimerez peut-être aussi