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

Acceso a archivo empaquetado en .jar

Estas en el tema de Acceso a archivo empaquetado en .jar en el foro de Java en Foros del Web. Hola: Tengo el siguiente problema: Mi programa maneja un archivo de configuracion .XML. En caso de que el archivo sea borrado, quiero que el programa ...
  #1 (permalink)  
Antiguo 15/09/2009, 15:19
Avatar de mandrake88  
Fecha de Ingreso: septiembre-2009
Mensajes: 328
Antigüedad: 14 años, 7 meses
Puntos: 13
Acceso a archivo empaquetado en .jar

Hola:

Tengo el siguiente problema: Mi programa maneja un archivo de configuracion .XML. En caso de que el archivo sea borrado, quiero que el programa cree un archivo default de configuracion.

Para esto cree un archivo configDefault.xml, el cual va a ir empaquetado dentro del .jar. Entonces cuando el programa no encuentre el archivo de configuracion, creeara un nuevo a partir del configDefault.xml que esta empaquetado en el .jar

Para esto implemente el siguiente codigo

try{
FileInputStream fis = new FileInputStream(URLDecoder.decode(getClass().getCl assLoader().getResource("configDefault.xml").getPa th()));
FileOutputStream fos = new FileOutputStream("config.xml");
FileChannel canalFuente = fis.getChannel();
FileChannel canalDestino = fos.getChannel();
canalFuente.transferTo(0, canalFuente.size(), canalDestino);
fis.close();
fos.close();
}catch (IOException ex) { ...}

getClass().getClassLoader().getResource("configDef ault.xml") devuelve un objeto de tipo URL. Al cual le mando el mensaje .getPath() y me devuleve el Path en string, pero me lo devuelve en alguna codificacion rara en la cual los espacios los representa con "%20", asi que aplico URLDecoder.decode(arg) lo cual me convierte ese path a la codificacion standar del sistema operativo.

Cuando hago la prueba en el eclipse, el programa funciona bien. En caso de que no encuentre el archivo de configuracion config.xml, crea un nuevo archivo a partir del configDefault.xml. Pero cuando exporto mi programa en .jar, el archivo no se crea, y se dispara la IOException.
  #2 (permalink)  
Antiguo 15/09/2009, 18:22
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Acceso a archivo empaquetado en .jar

Muy dificil de acertar, no se si requiera indicarle en el *.jar los permisos en la JVM o revisar el path de creación, o falta alguna libreria de creación del XML en la creación del *.jar.

La verdad (IOException) no da mucha descripción.
  #3 (permalink)  
Antiguo 15/09/2009, 19:11
Avatar de mandrake88  
Fecha de Ingreso: septiembre-2009
Mensajes: 328
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: Acceso a archivo empaquetado en .jar

no necesito ninguna libreria de XML para realizar eso. Tan solo hago una copia del archivo XML que ya va a estar incluido en el .jar

Fijate q es un fileinput, un fileouput, los channel y tan solo transfiere el contenido de un archivo a otro.

El problema esta en que una vez compilado el .jar, no encuentra la ruta. Puede que tenga que setear alguna característica especial a la hora de exportar en .jar?
  #4 (permalink)  
Antiguo 16/09/2009, 16:56
Avatar de mandrake88  
Fecha de Ingreso: septiembre-2009
Mensajes: 328
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: Acceso a archivo empaquetado en .jar

up. ..........
  #5 (permalink)  
Antiguo 17/09/2009, 09:58
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Acceso a archivo empaquetado en .jar

Igual puedes hacerlo instanciando a java.io.InputStream , usando algo como this.getClass().getResourceAsStream("/" + path);

Si no tienes que añadir el jar manualmente en el properties del proyecto, desde la dirección especificada. Y tratar de obtener el xml que esté contenido en el mismo.
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 12:03.