2011-01-08 22 views
5

Come procederesti nell'aprire un file .xml all'interno di un file .jar e modificarlo?Aprire e modificare il file in .jar con Java?

So che si può fare ...

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

Ma come si dovrebbe aprire il xmlData.xml, modificare il file e salvarlo nella .jar? Trovo utile sapere e non voler modificare un file al di fuori di .jar ... e l'applicazione deve rimanere in esecuzione per tutto il tempo!

Grazie!

+0

è l'applicazione che modifica il file XML all'interno dello stesso file JAR xmlData.xml? – Enrique

+0

sono uno nella stessa ... .jar ha il file XML all'interno di esso ... Sono in esecuzione il file .jar e desidera che l'applicazione .jar per modificare il .xml all'interno di esso – Zeveso

risposta

3

file Jar sono file .zip solo con suffisso file diverso, e la convenzione di denominazione per i contenuti. Quindi utilizzare le classi da java.util.zip per leggere e/o scrivere contenuti.

contenuti Modifica non è garantita (o addirittura probabile) per effettuare sistema in esecuzione, come classe Loader può memorizzare nella cache i contenuti come meglio ritiene opportuno.

Quindi potrebbe essere utile sapere di più su ciò che si sta in realtà cercando di raggiungere con questo. Modifica contenuto di un barattolo on-the-fly suona come approccio complesso e soggetto a errori ...

+0

voglio memorizzare tutti i miei dati nel file .xml all'interno del file .jar ... saranno cose come i nomi e-mail e tali – Zeveso

+0

Quindi stai persistendo i dati in un file xml all'interno di un file .jar? Cosa succede quando devi ridistribuire la tua app? Supponendo che tu voglia continuare ad usare l'XML. Dovresti considerare di persistere il file .xml al di fuori della tua app e usare la configurazione (magari tramite un file .properties o con Spring?) Per impostare il percorso sul file system di quel file xml. I contenuti di .jars dovrebbero essere lasciati da soli per garantire cose come l'integrità binaria. – whaley

+1

Davvero non penso che si possa fare in modo pulito. Per prima cosa devi risolvere il problema di localizzare il file jar in primo luogo (camminando sull'albero del classloader o ispezionando i parametri di avvio del processo java). Dopodiché usi java.util.zip per decomprimere il file, modificare e reimballare il file e poi preghi che il caching del classloader legga il tuo file aggiornato. Non dovrebbe essere fatto :). –

1

Se app. ha una GUI e tu hai accesso a un sito web/server, JWS potrebbe essere la risposta. L'API JNLP disponibile per le app JWS. fornisce servizi come PersistenceService. Ecco un piccolo demo. of the PersistenceService.

L'idea sarebbe quella di verificare la presenza di XML nel negozio di persistenza JWS. Se non è lì, scrivilo lì, altrimenti usa la versione cache. Se cambia, scrivi una nuova versione nello store.

La demo. scrive nello store alla chiusura e legge all'avvio. Ma non c'è motivo per cui non poteva essere chiamato da una voce di menu, timer ecc

Problemi correlati