PDA

View Full Version : [JAVA] analizzare il contenuto di un jar a runtime


asdf
19-09-2007, 16:25
Ciao.
volevo chiedervi in che modo posso analizzare (a runtime) il contenuto del file jar che sto eseguendo (o di un altro file jar).

Infatti vorrei estrarre alcune file dal jar che sto eseguendo, ma riesco a farlo solo se gli indico io il nome del file da estrarre. Il problema è che vorrei farlo senza dovergli indicare tutti i file ma facendogli estrarre automaticamente tutti i files contenuti in una sottodirectory del file jar.

Il metodo (che mi funziona) che uso per estrarre il singolo file è il seguente (ha il problema che estrae un singolo file quindi devo specificare i file da estrarre all'interno del codice):

/** Estrae un file dal file jar mettendolo nella directory SETTINGSDIR */
private void extractSetting(String fileName){
//estraggo dal file .jar i .vcf se non sono già presenti
ClassLoader jarFile=getClass().getClassLoader();
try {
//creo la directory che conterrà i settaggi
if(!new File(SETTINGSDIR).exists()) new File(SETTINGSDIR).mkdir();

//se il settaggio non c'è già lo estraggo
if(!new File(SETTINGSDIR+fileName).exists()){
InputStream in=jarFile.getResourceAsStream(fileName);
OutputStream out = new FileOutputStream(SETTINGSDIR+fileName);

// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}

} catch (Exception e) {e.printStackTrace();}
}


Grazie per l'aiuto

^TiGeRShArK^
19-09-2007, 16:26
ma usare winrar tipo? :fagiano:

franksisca
19-09-2007, 17:45
ma usare winrar tipo? :fagiano:

infatti......non capisco perchè complicarsi la vita:D

asdf
20-09-2007, 09:19
Perché io devo estrarre il file jar da remoto utilizzando una servlet. Il file risiederebbe sul server del cliente (mi hanno detto di fare così, io avrei messo direttamente i files estratti).

Mixmar
20-09-2007, 09:40
Prova a caricare il file Jar con la getResource del tuo classLoader, poi aprilo come JarFile: troverai all'interno una sequenza di ZipEntry, che corrispondo ai file contenuti.

Attenzione però: se fai così, devi aggiungere al classpath la directory che contiene il file Jar (non solo il file Jar in sè, non basta).

Se il file sta in "tomcat/lib", per esempio, puoi mettere nel classpath "tomcat/lib/miojar.jar;tomcat/lib".

asdf
20-09-2007, 11:10
Grazie mille.
Oggi pomeriggio proverò ad utilizzare la classe JarFile che mi hai segnalato (e di cui ingoravo l'esistenza).

Ciao.

71104
20-09-2007, 12:50
ma usare winrar tipo? :fagiano: perché WinRar potrebbe non essere installato sul computer su cui verrà eseguito il jar? :fagiano:
perché interagire con un programma esterno e nativo oltre che complicato lo legherebbe anche ad una specifica piattaforma? :fagiano:

^TiGeRShArK^
20-09-2007, 13:17
perché WinRar potrebbe non essere installato sul computer su cui verrà eseguito il jar? :fagiano:
perché interagire con un programma esterno e nativo oltre che complicato lo legherebbe anche ad una specifica piattaforma? :fagiano:

pensavo ke doveva vedere al runtime i file del jar per vedere tipo se aveva aggiunto correttamente qulche risorsa o cose del genere...
dal post iniziale non si capiva quello ke doveva fare :fagiano: