Newsgroup: it.comp.java
Titolo: Racuperare un file di testo da un jar

 
          Buongiorno a tutti.
Vorrei esporvi un problema che ho riscontrato e che non riesco proprio a
risolvere.
Ho fatto un'applicazione che lavora standalone con un database mySql e ho
fatto il JAR per distribuirla con comodità.
Tra le varie funzioni e' prevista la creazione di un database: essa oltre a
creare il database deve anche lanciare uno script SQL che ho messo in un
file di testo nel mio progetto (e nel pacchetto).
Il problema è che non riesco ad accedere al file. Ho provato ad istanziare
un ClassLoader e invocare il getResource() e a spostare in vari pacchetti e
posizioni il file, ma senza alcun esito positivo.
Ho controllato nel Jar e il file in questione è presente tralle classi.
Avete qualche idea su come risolvere?
Vi ringrazio in anticipo.
Ciao
PhAI
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 un ClassLoader e invocare il getResource()ů 
 
URL url = TuoFrame.class.getResource("testo.txt"); 
InputStream stream = url.openStream(); 
 
oppure 
 
InputStream stream = TuoFrame.class.getResourceAsStream("testo.txt"); 
 
Non so se ti č utile. 
Ciao 
Rigel 
 
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

xoomer.virgilio.it/csadun/resjars.html

Il punto è che qualunque directory virtuale sotto la "root" del filesystem
virtuale sarà implicitamente in classpath, quindi il ClassLoader non avrà
problemi a trovarla.
Sono daccordo, ma non funziona: va in NullPointerException
Provo ad esporre più concretamente il problema dopo ave messo in atto quanto
successo:
cartella virtuale => "resources"
nome filw a cui accedere => "crea_db" ti tipo testo piatto
codice usato => InputStream is =
ClassLoader.getSystemClassLoader().getResourceAsStream("resources/create_db");
Ho usato il ClassLoader (e non il Class) come hai indicato, ma le cose non
vanno... Il dubbio che ora mi sorge è: potrebbe dipendere il problema dal
fatto che il metodo che fa questo è dichiarato statico?
Grazie.


              Per la cronaca ho provato anche ad impostare esplicitamente il classpath nel
Manifest, ma stesso problema: NullPointerException
Ringrazio tutti per la disponibilita'


Scusate se sono ancora io a scrivere.. ma vorrei sapere, visto che a quanto
pare non si riesce a risolvere, se avete qualche soluzione alternativa per
leggere un file di testo e distribuire tutto in un unico jar...
Grazie ancora...


C'e' qualcosa che stai sbagliando. :(
Sei sicuro che il file sia nel jar, nella directory opportuna?
Ad esempio, costruisci
package my.pkg;
import java.io.IOException;
import java.io.InputStream;
public class MyCls {
    public static void test() {
        InputStream is=null;
        try {
	        is =
ClassLoader.getSystemClassLoader().getResourceAsStream("resources/test.txt");
	        System.out.println(is);
        } finally {
            if (is!=null)
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    public static void main(String[] args) {
        MyCls.test();
    }
}
e mettila insieme a /resource/test.txt in un jar Test.jar  (jar tvt
Test.jar da'
       51 Thu Jun 09 15:57:58 CEST 2005 META-INF/MANIFEST.MF
  1048 Thu Jun 09 14:59:06 CEST 2005 my/pkg/MyCls.class
         4 Thu Jun 09 14:59:58 CEST 2005 resources/test.txt
e il manifest e'
Manifest-Version: 1.0
Main-Class: my.pkg.MyCls
)
Vedrai che facendo girare la classe con java -jar T.jar ottieni
qualcosa tipo
sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@130c19b
- che e' il file stream, non null...