2011-01-08 30 views
5

¿Qué le parece abrir un archivo .xml dentro de un .jar y editarlo?¿Abrir y editar el archivo en .jar con Java?

Sé que se puede hacer ...

InputStream myStream = this.getClass().getResourceAsStream("xmlData.xml"); 

Pero ¿cómo abrir la xmlData.xml, editar el archivo y guardarlo en el .jar? Me parece útil saber esto y no quiero editar un archivo fuera de .jar ... y la aplicación debe seguir ejecutándose todo el tiempo.

¡Gracias!

+0

¿La aplicación que modifica el archivo xml dentro del mismo archivo jar que xmlData.xml? – Enrique

+0

son uno en el mismo ... .jar tiene el archivo .xml dentro de él ... estoy ejecutando el archivo .jar y quiero que la aplicación .jar edite el .xml dentro de él – Zeveso

Respuesta

3

Los archivos Jar son solo archivos .zip con diferentes sufijos de archivo y convención de nomenclatura para los contenidos. Por lo tanto, use las clases de java.util.zip para leer y/o escribir contenidos.

La modificación de los contenidos no está garantizada (o incluso probablemente) para afectar el sistema en ejecución, ya que el cargador de clases puede almacenar en caché los contenidos como lo considere oportuno.

Así que podría ser bueno saber más acerca de lo que realmente está tratando de lograr con esto. Modificar los contenidos de un jar sobre la marcha suena como un enfoque complicado y propenso a errores ...

+0

Quiero almacenar todo mis datos en el archivo .xml dentro del archivo .jar ... serán cosas como nombres de correo electrónico y tales – Zeveso

+0

¿Entonces usted está persistiendo datos en un archivo xml dentro de un archivo .jar? ¿Qué sucede cuando debes volver a implementar tu aplicación? Asumiendo que quiere seguir usando el XML. Debería considerar conservar el archivo .xml fuera de su aplicación y usar la configuración (quizás a través de un archivo .properties o con Spring?) Para establecer la ubicación en el sistema de archivos de ese archivo xml. El contenido de .jars debe dejarse solo para garantizar cosas como la integridad binaria. – whaley

+1

Realmente no creo que se pueda hacer limpiamente. Primero tiene que resolver el problema de localizar el archivo jar en primer lugar (recorrer el árbol del cargador de clases o inspeccionar los parámetros de inicio del proceso java). Después de eso, usa java.util.zip para descomprimir el archivo, editar y volver a empaquetar el archivo y luego reza para que el caché del cargador de clases lea su archivo actualizado. No debería hacerse :) –

1

Si su aplicación. tiene una GUI y usted tiene acceso a un sitio web/servidor, JWS podría ser la respuesta. La API JNLP que está disponible para las aplicaciones JWS. proporciona servicios tales como PersistenceService. Aquí hay un pequeño demo. of the PersistenceService.

La idea sería comprobar el XML en el almacén de persistencia de JWS. Si no está allí, escríbalo allí, de lo contrario utiliza la versión en caché. Si cambia, escribe una nueva versión en la tienda.

La demostración. escribe en la tienda al cerrar y lee en el inicio. Pero no hay ninguna razón por la que no pueda invocarse mediante un elemento de menú, temporizador, etc.

Cuestiones relacionadas