¿Cómo puede una aplicación usar archivos dentro del JAR para leer y escribir?

Necesito almacenar datos en archivos dentro del archivo .jar y leerlos nuevamente.

Sé que puedo usar el método Class.getResourceAsStream() pero devuelve un InputStream que puedo leer . Pero busco una forma de escribir.

Necesito almacenar datos en archivos dentro del archivo .jar y volver a leerlos

No, no lo haces.

En su lugar, guarde el archivo ‘predeterminado’ dentro del Jar. Si se cambia, almacene el archivo alterado en otro lugar. Un lugar común es un subdirectorio de user.home . Al verificar el archivo, primero verifique la existencia de un archivo alterado en el sistema de archivos, y si no existe, cargue el archivo predeterminado.


Tenga en cuenta que generalmente es mejor describir el objective, en lugar de la estrategia. ‘Almacenar archivo cambiado en Jar’ es una estrategia, mientras que ‘Guardar preferencias entre ejecuciones’ podría ser el objective.

Relacionado: ¿Cuál es el problema XY?

Esto realmente no es compatible. En principio, podría operar en el archivo jar, pero no hay garantía de que los nuevos contenidos se carguen correctamente. Deje que sus herramientas de comstackción administren el archivo jar y elija otra cosa para el almacenamiento persistente administrado por su propio progtwig. Como un archivo.

Es poco probable que pueda cambiar un contenedor cargado de manera segura. Cambiarlo mientras se usa no es una buena idea.

Si desea hacer esto, use un directorio de sistema de archivos simple y agregue / elimine archivos de él. Incluso esto puede no funcionar como esperabas.

Puede manipular cualquier archivo jar utilizando el paquete java.util.jar (o solo java.util.zip ). A medida que se comprimen los archivos dentro de un contenedor, esta no es la forma más eficiente de almacenar datos.

Probablemente deberías usar un directorio en otro lugar (por ejemplo, System.getProperty("user.home") + "/.myProgram" ) o ver java.util.prefs .

Class.getResource() devuelve una URL. Teóricamente, puede usar esta URL para crear su InputStream y OutputStream . Pero en la mayoría de los casos, el JAR generado es un archivo de solo lectura (o archivo). Por lo tanto, es posible que su aplicación se desconecte al intentar usarla.