Voglio solo leggere un file nel mio programma. Il file si trova una directory sopra la directory di lavoro in "../f.fsh". Così il seguente codice viene eseguito correttamente quando l'eseguo nell'IDEPerché getResourceAsStream() funziona nell'IDE ma non nel JAR?
String name="../f.fsh";
InputStream is = getClass().getResourceAsStream(name);
InputStreamReader isreader=new InputStreamReader(is);//CRASHES HERE WITH NULL POINTER EXCEPTION
BufferedReader br = new BufferedReader(isreader);
ma quando creo un file JAR che ha f.fsh zip all'interno di esso ed eseguirlo, si blocca durante la creazione del InputStreamReader, perché l'InputStream è zero.
Ho letto un sacco di risposte alle domande sui flussi di input e sui file JAR e quello che ho ottenuto è che dovrei usare percorsi relativi, ma lo sto già facendo. Da quanto ho capito getResourceAsStream() può trovare i file relativi alla radice del progetto, questo è quello che voglio. Perché non funziona in JAR? Cosa non va, come posso risolverlo?
Ha a che fare con il classpath? Pensavo che fosse solo per includere i file esterni al jar in esecuzione.
Ho anche provato, ma ancora non riescono, quando mette una barra in:
InputStream is = getClass().getResourceAsStream("\\"+name);
ho guardato: How to get a path to a resource in a Java JAR file andfound che il contenuto di un barattolo possono non necesarily essere accessibile come file. Così l'ho provato con la copia del file relativo al jar (una directory dal jar), e ciò non riesce ancora. In ogni caso mi piacerebbe lasciare i miei file nel barattolo ed essere in grado di leggerli lì. Non so cosa stia sbagliando.
Grazie, ha senso. Ho cambiato i miei percorsi di file e dove si trovano le mie risorse ed è stato in grado di superare questo errore nel vaso. Non avrei mai pensato che Eclipse avesse un bug in mio favore. Grazie mille! – AAB