PDA

View Full Version : [JAVA] Problema nell'accesso a risorse esterne al JAR


kevo83
25-03-2008, 11:39
Salve a tutti,
ho un problema con una applicazione java che sto sviluppando.
Vengo subito al punto: la mia applicazione è contenuta in un jar (es. myapp.jar) e per varie necessità ho bisogno che nella stessa directory in cui si trova myapp.jar venissero gestite dall'applicazione due cartelle:

- logs: in cui vengono salvati i file di log generati durante l'esecuzione
- config: in cui verrà creato dall'applicazione un file xml contenente la configurazione

il problema è che non riesco a far si che l'applicazione "veda" ed utilizzi queste due cartelle.

In particolare da prove effettuate ho visto che:
- se per i file log non specifico alcun percorso questi vegono generati nella mia cartella home (lavoro su ubuntu)
- se per gli stessi file specifico il percorso "logs/nomefile.log" questi non vengono creati
- andando per tentativi e aggiungendo le directory logs e config nel class-path del manifest.mf non cambia nulla ovviamente..
- del file di configurazione xml poi non ne parliamo...stessi problemi

Qualcuno saprebbe aiutarmi? Come posso fare in modo che un jar veda le cartelle al suo stesso livello?

Grazie in anticipo a tutti!!

thehuge
25-03-2008, 11:53
Non sono sicuro che possa aiutarti, ma se ricordo bene questo
System.getProperty("user.dir")restituisce la directory che contiene l'applicazione (nel tuo caso il .jar).
Avendo questo puoi usare i path relativi ad esso.

kevo83
25-03-2008, 11:58
grazie thehuge, provo subito e posto i risultati!

kevo83
25-03-2008, 12:09
ho provato usando quella riga di codice ma la cosa non mi ha aiutato purtroppo..

System.getProperty("user.dir") mi restituisce la directory /home/mionome come directory di lavoro corrente anche se il mio jar si trova sulla scrivania, mentre io avrei bisogno di accedere le cartelle che si trovano allo stesso livello del mio jar..

in ogni caso ti ringrazio lo stesso per il consiglio!

wizard1993
25-03-2008, 12:22
io poco tempo fa ho creato un applicazione jar che sfruttasse dei file esterni, è bastato mettere le cartelle nella cartella del jar

kevo83
25-03-2008, 12:32
infatti anche io pensavo bastasse fare così ma non riesco proprio a fargliele vedere e non capisco perchè....in pratica il problema è che i file li cerca nella mia directory utente /home/username....potresti postarmi qualche dettaglio in più se ti è possibile? potrebbe essere un problema di classpath?

vladix
25-03-2008, 12:39
nn so come fare x vedere le cartelle , ma ze devi caricare dei file ( ad esepmio il file di log ) puoi usare ClassLoader


URL url = ClassLoader.getSystemResource("logs/mioFileDiLog.log");

poi x caricare un File usi url.toString()

wizard1993
25-03-2008, 13:20
con uno \ solo dubito che faccia qualcosa

thehuge
25-03-2008, 16:47
Il metodo di prima effettivamente restituisce la pwd (present working directory) dell'utente al momento della chiamata dell'applicazione. Quindi se al momento di dare il comando java -jar /path/del/file.jarla tua pwd era /home/username, il metodo restituisce quello.

Prova allora questo:
this.getClass().getProtectionDomain().getCodeSource().getLocation()
Dovrebbe restituire il path assoluto del'archivio .jar (incluso il nome del file).
Da questo togli il nome del file ed aggiungi ciò che ti serve.