Problema pathname dopo esportazione jar

di il
4 risposte

Problema pathname dopo esportazione jar

Salve a tutti,

Cerco di spiegarmi meglio possibile per poter risolvere il mio problema.
Ho creato un progetto su eclipse. L'applicazione è di tipo client-server ed il client legge da un file json alcuni parametri di configurazione.
Il file è contenuto nello stesso package del client.
Su Eclipse funziona tutto ma quando vado ad esportare il progetto andando a generare un jar eseguibile viene sollevata un eccezione di tipo FileNotFound.
Per quanto ho capito il problema è relativo al pathname del file conf.json che viene caricato in questa porzione di codice:

JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("conf.json"));
JSONObject jsonObject = (JSONObject) obj;
Una volta esportato il jar infatti, Il FIleReader non può essere creato perchè non viene trovato il file conf.json

Ho provato a cercare qualche soluzione in giro ma non ho risolto.


Grazie,
Federico.

4 Risposte

  • Re: Problema pathname dopo esportazione jar

    pincia ha scritto:


    Per quanto ho capito il problema è relativo al pathname del file conf.json che viene caricato in questa porzione di codice:
    Il conf.json dove deve stare, dentro il jar o fuori dal jar? Se deve stare dentro il jar allora NON puoi aprirlo usando FileReader. Le classi di I/O che trattano file, si aspettano file direttamente sul file-system .. non dentro altri file particolari.

    Se deve stare dentro, il file lo devi trattare come "risorsa" ed usare getResource o getResourceAsStream di java.lang.Class.
  • Re: Problema pathname dopo esportazione jar

    Grazie mille...ho capito.
    Se deve stare dentro, il file lo devi trattare come "risorsa" ed usare getResource o getResourceAsStream di java.lang.Class.
    Mettiamo il caso io lo voglia trattare come risorsa e quindi tenerlo dentro il jar, come faccio a farne il parsing visto che il parse utilizza un Reader?
  • Re: Problema pathname dopo esportazione jar

    pincia ha scritto:


    Mettiamo il caso io lo voglia trattare come risorsa e quindi tenerlo dentro il jar, come faccio a farne il parsing visto che il parse utilizza un Reader?
    Quale API per JSON stai usando? A naso direi la json-simple, vero? Bene, il JSONParser ha diversi parse() ma nessuno prende direttamente URL o InputStream. Questo non è un problema, in quanto puoi usare InputStreamReader per incapsulare un InputStream in un Reader.

    La prima questione, principale, è come referenziare il file. Se hai una TuaClasse in un package x e il conf.json è in quello stesso package, ti basta fare:
    InputStream confInputStream = TuaClasse.class.getResourceAsStream("conf.json");
    Poi però serve:
    - creare il InputStreamReader (nota: tieni presente le questioni sui charset!)
    - preoccuparsi poi del close. Infatti per quanto so, JSONParser NON fa close sul Reader passato, che quindi spetta a te.

    Il consiglio che posso darti è di incapsulare tutta questa logica in una classe generalizzata in modo da poter fare es.:
    MyJsonReader myJsonReader = new MyJsonReader();
    JSONObject jsonObject = myJsonReader.readObject(confInputStream);
  • Re: Problema pathname dopo esportazione jar

    Quale API per JSON stai usando? A naso direi la json-simple, vero?
    Sì sto utilizzando le API json-simple

    Credo di aver capito la logica di quello che mi hai spiegato. Appena posso mi metto a fare delle prove e vediamo se riesco a mettere in pratica.

    Grazie mille!

    Federico
Devi accedere o registrarti per scrivere nel forum
4 risposte