Prima di tutto, ho letto molti S.O. domande su questo argomento e ho provato le cose suggerite in loro.Come si deve accedere alle risorse in un vaso compilato?
Ecco la mia situazione. Sto scrivendo un'app Java utilizzando il framework Processing e sono nelle fasi finali in cui ho bisogno di iniziare a pensare a confezionare l'app. Un file jar eseguibile dalla riga di comando è ciò che sto tentando di creare utilizzando la funzione Esporta in Eclipse.
La struttura del mio progetto si presenta così:
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
quando esporto il file jar e uzip il vaso di ispezionare il suo contenuto, trovo che il contenuto di questi dirs sono stati scaricati nel livello più alto del .jar.
che assomiglia a questo:
.jar
packages
jar files
fonts
json files
Così, quando tento di caricare un file di configurazione con qualcosa di simile:
BufferedReader reader = new BufferedReader(new FileReader(path));
Tutto funziona proprio file quando corro l'applicazione in Eclipse. Ma il file jar genera uno FileNotFoundException
.
Molte delle domande che ho visto su S.O. per quanto riguarda problemi come questi consigliamo di utilizzare utilizzando class.getClass().getResource()
o class.getResourceAsStream()
. Ho provato entrambe queste utilizzano percorsi relativi e solo il nome del file come in:
class.getResource('config.json');
class.getResources('cfg/config.json');
class.getResourceAsStream('../../config.json');
Tutti questi metodi restituiscono nulla, quando viene eseguito sia da Eclipse o il vaso utilizzando:
java -jar myjarfile.jar
Sono apri anche all'utilizzo di un file Ant. Infatti, sto utilizzando il file Ant generato dalla funzione di esportazione per creare il jar. Se c'è qualcosa che posso aggiungere a questo per aggiungere le directory nel barattolo sarebbe fantastico.
Grazie per la risposta. Stai suggerendo che io uso la barra diretta in aggiunta a getResource()? – JeremyFromEarth
Questo sembra avvicinarsi molto. Questo è il percorso restituito da: jar: file:/C: /path_to_project/myjarfile.jar! /config.json Tuttavia, quando eseguo il jar, ottengo comunque un file non un'eccezione anche se il percorso è corretto. Dovrei anche menzionare che funziona da dentro Eclipse. – JeremyFromEarth
Non è possibile utilizzare FileReader con risorse all'interno di jar. È necessario utilizzare InputStream restituito da getResourceAsSTream. –