Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    Eclipse, file, cartelle, classpath

    Ciao a tutti,
    non sono molto pratico del release di applicazioni Java ma ora ne ho necessità e faccio solo della gran confusione.
    Lavoro su Eclipse e l'obiettivo finale è questo:
    - Applicazione .JAR
    - Accesso a file contenuti una sottocartella presente nella stessa cartella del JAR (file di configurazione)
    - Accesso a file che devono invece finire dentro al JAR

    DOMANDE:

    1) Cosa cambia tra source folder e folder "normale"? Se vedo bene, la source folder viene copiata dentro al JAR, ma vanno messi lì dei file di testo "normali"? Perché io così non riesco ad accedervi... o meglio: un file dentro la source folder resources/ appare dentro resources se lancio da Eclipse, ma nel JAR non viene copiata dentro una cartella resources ma in quella principale...a cosa servirebbe quindi una source folder?

    2) Come accedo al file esterno?
    Se io faccio qualcosa come:

    codice:
    File f = new File ("external/file.txt");
    funziona fintanto che io lancio il JAR con java -jar Program.jar essendo nella cartella del programma, ma non se lo lancio da un'altra posizione. Come mai?

    Grazie a tutti.
    *********************************
    Andrea
    *********************************

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281

    Re: Eclipse, file, cartelle, classpath

    Originariamente inviato da Squall1988
    1) Cosa cambia tra source folder e folder "normale"? Se vedo bene, la source folder viene copiata dentro al JAR
    Un "source" folder è una cartella fisicamente come le altre che però Eclipse riconosce come contenitore di sorgenti e la considera nella fase di build. Se hai un progetto aperto, apri le Properties del progetto, poi nella sezione Java Build Path, quindi la pagina-tab "Source". Lì sono elencati i source folder. Se hai un comune Java Project hai sicuramente una tuoprogetto/src. Eclipse la riconosce in virtù di questa configurazione, niente di più.

    Originariamente inviato da Squall1988
    ma vanno messi lì dei file di testo "normali"?
    Se sono da trattare come "risorse" (file/documenti che "fanno" parte della applicazione) e dovranno essere caricate dalla applicazione, sì.

    Originariamente inviato da Squall1988
    Perché io così non riesco ad accedervi...
    Dipende da come ci accedi programmaticamente ....

    Originariamente inviato da Squall1988
    un file dentro la source folder resources/ appare dentro resources se lancio da Eclipse, ma nel JAR non viene copiata dentro una cartella resources ma in quella principale...a cosa servirebbe quindi una source folder?

    2) Come accedo al file esterno?
    Se io faccio qualcosa come:

    codice:
    File f = new File ("external/file.txt");
    funziona fintanto che io lancio il JAR con java -jar Program.jar essendo nella cartella del programma, ma non se lo lancio da un'altra posizione. Come mai?
    Ok, allora ti chiederei di leggere questa mia risposta ad un'altra recente discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Scusa ma ancora non mi è chiaro.

    Possiamo fare due semplici esempi?

    ESEMPIO 1:
    MIAFOLDER
    - Program.jar
    - file.txt

    ESEMPIO 2:
    MIAFOLDER
    - Program.jar
    > com.miodominio.Main
    > file.txt (dentro una "source folder" chiamata resources)

    Qual è il modo corretto di accedere ai file nei due casi e perché Eclipse tratta la source folder come cartella se lancio da Eclipse e invece fonde tutto quando creo il jar?

    Grazie mille.
    *********************************
    Andrea
    *********************************

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da Squall1988
    Scusa ma ancora non mi è chiaro.
    Allora leggi questo:

    Una classe com.esempio.Main apre lo stream di un file.txt con:

    codice:
    InputStream is = Main.class.getResourceAsStream("file.txt");
    Questo funziona per tutti i seguenti scenari:

    1)
    ...qualunque-cosa.../unacartella/com/esempio/Main.class
    ...qualunque-cosa.../unacartella/com/esempio/file.txt

    se la directory "unacartella" è in classpath


    2)
    ...qualunque-cosa.../unacartella/app.jar (contiene com/esempio/Main.class)
    ...qualunque-cosa.../unacartella/com/esempio/file.txt

    se anche la directory "unacartella" è in classpath oltre al app.jar


    3)
    ...qualunque-cosa.../unacartella/app.jar (contiene com/esempio/Main.class e com/esempio/file.txt)

    se app.jar è in classpath (e lo è di sicuro se Main si avvia correttamente)


    E non sono gli unici scenari (non ho messo l'inverso del 2) ad esempio ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Dunque, ora carico i file che finiranno dentro al jar (e quindi dentro /target/classes) avendo creato una cartella resources.

    Ma come faccio invece per i file FOURI dal jar?

    - MioJar.jar
    - file.txt

    Se nel main di MioJar.jar faccio

    File f = new File("file.txt");

    funziona solo se lancio il jar dalla cartella e non da fuori...
    *********************************
    Andrea
    *********************************

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da Squall1988
    Ma come faccio invece per i file FOURI dal jar?

    - MioJar.jar
    - file.txt

    Se nel main di MioJar.jar faccio

    File f = new File("file.txt");

    funziona solo se lancio il jar dalla cartella e non da fuori...
    Se usi una qualunque API del I/O usando un java.io.File (o un String) con un filename relativo sei tu che devi poter controllare e impostare la directory corrente appropriata affinché funzioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Scusa e come faccio a controllare questa cosa? Se io distribuisco un file JAR non ho controllo su come verrà usato dall'utente finale...non c'è un modo per rendere i percorsi corretti da codice?
    *********************************
    Andrea
    *********************************

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da Squall1988
    Scusa e come faccio a controllare questa cosa? Se io distribuisco un file JAR non ho controllo su come verrà usato dall'utente finale...
    Appunto: o chiarisci all'utente che deve essere nella directory del jar per poter avviare l'applicazione .... oppure fornisci all'utente un batch/script o un eseguibile nativo che si preoccupa di avviare la JVM nel modo giusto e dalla directory giusta.
    Nota: esistono tools che permettono di creare dei "launcher" nativi (es. JSmooth) ed esistono tools, anche gratuiti, per creare degli "installer" (es. NSIS). In questi casi l'utente può avere un eseguibile nativo o anche una "installazione" completa con voce nel menù programmi.

    Se dai all'utente solo il jar o uno zip che contiene jar e pochi altri file utili .... si presuppone che l'utente sappia cosa fare e sia un pochino "evoluto".

    E comunque, se quel file che vuoi gestire è "fisso", fa parte della applicazione, devi più appropriatamente caricarlo come "risorsa" e come l'ho già spiegato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Grazie della risposta.
    Il fatto è che il file di testo in realtà contiene delle impostazioni per l'applicazione, quindi non posso inserirlo dentro al JAR perché deve essere modificabile.
    Ti posso chiedere degli esempi di comandi per lanciare il jar nel modo corretto?
    *********************************
    Andrea
    *********************************

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da Squall1988
    Il fatto è che il file di testo in realtà contiene delle impostazioni per l'applicazione
    Ah, ok.

    Originariamente inviato da Squall1988
    quindi non posso inserirlo dentro al JAR
    Allora valuta la possibilità di metterlo in una locazione "nota", ad esempio sotto (direttamente o in sotto-cartelle prefissate da te) la directory "home" dell'utente. Molte applicazioni tengono i settings lì sotto.
    Nota: la "home" directory è rintracciabile facilmente da programma, quindi non saresti più legato alla directory "corrente".

    Originariamente inviato da Squall1988
    Ti posso chiedere degli esempi di comandi per lanciare il jar nel modo corretto?
    Il comando basilare è:

    java -jar nome.jar argomenti.....

    Ma questo non imposta certo la directory, è l'utente che deve essere da prompt nella directory giusta o impostare la directory in un collegamento se lo avvia così.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.