style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Duda con la filosofia de los JAR, porque me estoy volviendo loco.

Saludos,
Desde hace poco tiempo, he comenzado a desarrollar en java, provengo de C#, y ahora desarrollo sobre el IDE NetBeans. La situacion es la siguiente:
Estoy desarrollando una aplicacion de escritorio en Swing con NetBeans 6.8, lo cierto es que he creado varios ficheros XML y .properties, para manejar la internacionalizacion del sistema y otros elementos como la conexion a Base de datos que la almaceno es uno de estos ficheros. Bueno estos ficheros necesito que no queden empaquetados en el .JAR de la aplicacion, porque deben ser modificados cada cierto tiempo, al configurar nuevos idiomas, o para actualizar la conexion con el servidor de BD. No hay problemas mientras ejecuto la aplicacion desde el netbeans, hasta ahi todo bien pero ya desde el momento en punto en que compilo y empaqueto la aplicacion para comenzar a explotarla o usarla, se genera el .JAR y los ficheros que les comente quedan empaquetados dentro de este, por tanto no puedo modificarlos mas, y realmente necesito hacerlo con frecuencia. Si alguien puede decirme como hacerlo, se lo agradeceria muchisimo porque realmente no veo la solucion para hacer que esos ficheros no se empaqueten al cmpilar, sino que yo pueda modificarlos a posteriori.

Opciones de visualización de comentarios

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

Acerca de los jars

Un jar es un archivo zip que contiene diferentes archivos: .class, .properties, .xml, etc. No puedes modificarlo en tiempo de ejecucion por que significaria desempaquetar algun archivo, modificarlo y reempaquetar el jar, pero como el jar esta en uso, es el so quien te bloquea la modificacion.

Si tu necesitas modificar un archivo, no lo metas en un jar y dejalo por ahi afuera par que puedas abrirlo y actualizarlo. Por ejemplo en una carpeta app estan esos dos archivos, tu jar y tu archivo.txt, creaste tu jar con un manifest que contiene la clase main y por ende con un dobleclick se abre. Entonces si en tu aplicacion instancias un nuevo File, la ruta predeterminada es en la carpeta donde ejecutaste tu jar:

//app/
//       -> app.jar
//       -> archivo.txt

//en algun metodo de alguna clase instancias el file
File file = new File(".", "archivo.text");
//y eso lo que hara es buscarte el archivo en la ruta de trabajo del nuevo proceso que se creo en el sistema,
//y la ruta de trabajo apunta a la carpeta donde esta el jar que ejecutaste con un doble click.
// de esa manera puedes modificar tu archivo desde dentro de tu app.

Ahora, que si lo que tu quieres es un solo archivo, te recomiendo que utilizes una base de datos sql embebida como h2 database, y cuando intentes abrila y no exista, la creas e insertas registros por default.

sobres!

Imagen de ezamudio

C#

Si has programado en C# sabes que en un assembly puedes también meter ciertos recursos, pero al ser compilado como DLL, no puedes modificar lo que venga dentro (mucho menos si viene firmado digitalmente). Lo mismo con los JARs. Y como con los assemblies, si quieres archivos que se puedan editar (por el usuario o por el programa) los debes de poner fuera del JAR. Lo que puedes hacer es que cuando corre tu programa busca el archivo fuera del JAR y si no lo encuentra, copia el que viene dentro del JAR con los defaults, dejando una copia ya fuera del jar. Solamente asegúrate que queden esos archivos dentro del classpath.

SObre los Jar

Muchas gracias por la yuda amigo. Si, lo que dices es cierto, en C# se puede hacer lo que dices, por cierto yo lo he hecho muchas veces. De todas formas me han aclarado las cosas bastante. Lo que hare entnces es no meterlo dentro del jar sino crear esos archivos en el mismo lugar donde esta el jar y lo cargo mediante el uso de la clase File.

SObre los Jar

Muchas gracias amigo, hare eso que me dices, gracias por la ayuda.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">