studio programacion móviles libro desarrollo curso aplicaciones java jar

java - programacion - Modificar un archivo dentro de un contenedor



manual de programacion android pdf (12)

Me gustaría modificar un archivo dentro de mi jar. ¿Es posible hacer esto sin extraer y volver a discordar, desde mi aplicación?

El archivo que quiero modificar son archivos de configuración, principalmente basados ​​en xml.

La razón por la que estoy interesado en no discordancia es que la aplicación está empaquetada con launch4j si la deshago, no puedo crear el archivo .exe nuevamente.


Como muchos han dicho, no puede cambiar un archivo en un JAR sin volver a explorar el JAR. Es incluso peor con Launch4J, tienes que reconstruir el EXE una vez que cambias el JAR. Entonces no sigas esta ruta.

En general, es una mala idea colocar archivos de configuración en el JAR. Aquí está mi sugerencia. Busque su archivo de configuración en algunas ubicaciones predeterminadas (como el directorio principal, / Archivos de programa / etc). Si encuentra un archivo de configuración, úselo. De lo contrario, utilice el que está en el JAR como alternativa. Si hace esto, solo necesita escribir el archivo de configuración en la ubicación predeterminada y el programa lo recogerá.

Otro beneficio de este enfoque es que el archivo de configuración modificado no se sobrescribe si actualiza su software.


Echa un vistazo a TrueZip .

Hace exactamente lo que quiere (para editar archivos en línea dentro de un archivo jar), a través de una API de sistema de archivos virtual. También admite archivos anidados (jar dentro de un contenedor) también.


Esto puede ser más trabajo de lo que estás tratando de enfrentar en el corto plazo, pero sospecho que a largo plazo sería muy beneficioso que estudies el uso de Ant (o Maven , o incluso Bazel ) en lugar de compilar jar''s manualmente. . De esta forma, puede hacer clic en el archivo ant (si usa Eclipse) y reconstruir el contenedor.

Alternativamente, puede que realmente no desee tener estos archivos de configuración en el contenedor: si espera reemplazar estos archivos periódicamente o si se debe distribuir a varias personas, el archivo de configuración no debe formar parte de el tarro en absoluto.


Extraiga el archivo jar por ej. con winrar y usar CAVAJ:

Cavaj Java Decompiler es una utilidad gráfica gratuita que reconstruye el código fuente de Java a partir de archivos CLASS.

aquí está el video tutorial si lo necesita: https://www.youtube.com/watch?v=ByLUeem7680


La forma más sencilla que he encontrado para hacer esto en Windows es con WinRAR :

  1. Haga clic derecho en el archivo y seleccione "Abrir con WinRAR" en el menú contextual.
  2. Navegue hasta el archivo que se va a editar y haga doble clic en él para abrirlo en el editor predeterminado.
  3. Después de hacer los cambios, guarde y salga del editor.
  4. Aparecerá un diálogo que le preguntará si desea actualizar el archivo en el archivo: seleccione "Sí" y se actualizará el JAR.

Los archivos Java jar tienen el mismo formato que los archivos zip, por lo que si tiene una utilidad de archivo zip que le permite modificar un archivo, tiene un pie en la puerta. El segundo problema es que, si desea recompilar una clase o algo, probablemente solo tendrá que volver a compilar el contenedor; pero un archivo de texto o algo así (xml, por ejemplo) debería modificarse con la suficiente facilidad.



Para ampliar lo que dfa dijo, la razón es porque el archivo jar está configurado como un archivo zip. Si desea modificar el archivo, debe leer todas las entradas, modificar el que desea cambiar y luego volver a escribir las entradas en el archivo jar. He tenido que hacer esto antes, y esa fue la única forma en que pude encontrar para hacerlo.

EDITAR

Tenga en cuenta que esto está utilizando los editores de archivos jar internos a Java, que son flujos de archivos. Estoy seguro de que hay una manera de hacerlo, puedes leer todo el contenedor en la memoria, modificar todo y luego volver a escribir en una secuencia de archivos. Eso es lo que creo que las utilidades como 7-Zip y otros están haciendo, ya que creo que el ToC de un encabezado zip debe definirse en el momento de la escritura. Sin embargo, podría estar equivocado.


Puedes usar Vim:

vim my.jar

Vim es capaz de editar archivos de texto comprimido, dado que ha unzip en su entorno.


Sí, puede, usando SQLite, puede leer o escribir en una base de datos desde el archivo jar, para que no tenga que extraer y luego volver a jar, siga mi publicación http://shoaibinamdar.in/blog/?p=313

usando la sintaxis "jdbc: sqlite :: resource:" podrías leer y escribir en una base de datos desde dentro del archivo jar


Siempre que este archivo no sea .class, es decir, archivo de recursos o archivo de manifiesto, puede hacerlo.


Puede usar la opción u para jar

De los Tutoriales de Java:

jar uf jar-file input-file(s)

"Se sobrescribirán todos los archivos que ya estén en el archivo con el mismo nombre de ruta que el archivo que se está agregando".

Consulte Actualización de un archivo JAR .

Mucho mejor que volver a hacer todo el jarro. Invocar esto desde dentro de tu programa también parece posible. Intenta ejecutar la línea de comandos en Java