Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    11

    [JAVA] Caricare .txt interni a un .jar

    Ebbene sì, sono di nuovo io -___-
    Dopo aver risolto il problema con i file .jar eseguibili, ho visto che parte del mio programma non funziona: avevo modo di caricare il contenuto di file .txt usando FileReader incapsulato in un BufferedWriter, e mi funzionava bene. Finchè non ho controllato con il .jar...

    Mentre il caricaggio "generale" (cioè esterno, nel computer) funziona, mi sono reso conto che alcuni dei file da caricare si trovano "dentro" il .jar del programma, e quindi non posso estrarli se sposto il mio .jar fuori dalla cartella di base.

    Ho ricontrollato i miei appunti e visto che l'unico modo sarebbe usare getResorceAsStream(), che usa uno stream di byte, ma non riesco a capire:

    - Cosa inserire come sorgente per questo tipo di getResource (cioè il percorso del file da estrarre...navigo nelle cartelle contenute in questo archivio .jar per trovare il mio .txt? Come?);

    - Come meglio usare questo InputStream. Voglio dire: come convertirlo nella maniera più simile possibile a quello che avevo già fatto, cosicché posso sempre leggere un .txt? Pensavo di fare BufferedInputStream(FileInputStream(InputStreamRea der(InputSteam)))...

  2. #2
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    codice:
    this.getClass().getClassLoader().getResourceAsStream()
    quindi vedrai ogni cosa come nella stessa cartella e userai nomi relativi.
    Ad es. se nel jar hai una cartella chiamata "immagini" ti riferirai a un'immagine come "immagini/img.jpg", per il tuo file di testo direttamente "file.txt".
    Poi siccome è un file di testo ti conviene, secondo me,
    codice:
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    Da notare che per far funzionare il codice sopra in eclipse devi mettere il tuo file.txt non nella cartella src bensì nella cartella bin.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    11
    Ok....
    c'è un piccolo problema: il caricaggio dei files viene fatto nel mio programma da una classe Load a parte che accetta in ingresso il pathname del file: quindi non vorrei aprire direttamente lo stream, ma inserire il percordo del file nella mia classe di lavoro(che ho modificato in modo che accetti di lavorare con FileInputStream)
    Non c'è modo di "tirare fuori" dal .jar solo il path del file che voglio caricare? Se usassi getResource() - che mi dà un URL - e da lì estraessi il path per lavorare? E' possibile?

  4. #4
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    "caricaggio" è grandioso!
    Ke io sappia no, ma scusa ke ti cambia modificare il codice all'interno della classe Load in modo che, data la stringa del path (che in questo caso sarà semplicemente "file.txt"), è questa a invocare il class loader e il metodo getResourceStream ? Così ti tieni anche tutto, a parte la Load, uguale a prima.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    11
    Perché sono pigro no, ci avevo già provato, ma non ce l'ho fatta...
    Quindi dovrei fare:

    "classe nella stessa cartella dei files".getClass().getClassLoader().getResourceAsSt ream("nomefile");

    giusto? Facendo così però non mi funziona più nulla, neppure il caricaggio (XD) dei file con finestra di dialogo dall'esterno! Forse perché il metodo specifico dove uso questo load - che è public static String load(String filename) - è statico? O perché sbaglio il posizionamento dei file? Tutte le classi sono inserite in package (compreso il main), i file di testo che voglio caricare da .jar no...

  6. #6
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Si se non sbaglio il fatto che sia statico qualche problema lo crea...giusto per fare chiarezza il file da richiamare deve stare al livello dei packages, quindi se apri il jar come file .zip/.rar devi trovarti
    --package1(cartella)
    --package2(cartella)
    --file.txt
    e ti ricordo che da eclipse file.txt deve stare nella cartella bin affinché ti funzioni anche da li...hai questa struttura?

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    11
    Struttura a posto, mister. Per lo statico ho aggirato richiamando direttamente la classe main/main.class (main dentro il package main), anche se continua a non andare...potrebbe essere lì l'errore?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.