Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [JAVA] Percorso java

  1. #1

    [JAVA] Percorso java

    Buongiorno, la seconda domanda oggi.

    Creo un file Jar di un'applicazione, ma trovo una FileNotFoundException. Vorrei capire il perchè.

    La classe main si trova in una cartella di nome idec.

    idec/mainClass.

    Poi devo caricare dei file che si trovano allo stesso ilvello della cartella idec, precisamente in questo modo:

    idec
    --- mainClass
    props
    ---props.doc

    Quando vado a cercare il file io scrivo

    FileOutputStream nome_file = new FileOutputStream(new File("props/idec.prop"));

    è sbagliato immagino.

    Cosa devo scrivere?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Sì.
    O specifichi l'intero percorso fisico del file, oppure ti appoggi a delle supposizioni: nel tuo caso stai supponendo che la directory di lavoro sia la directory "genitore" di idec.

    Questa supposizione non è, ovviamente, valida a priori e, da quel che ottieni, si può certamente dire che non è valida nel tuo caso.

    Hai anche un'altra strada che puoi percorrere: utilizzare getResource() e getResourceAsStream() della classe Class, che utilizza le stesse regole usate dal ClassLoader, ovvero si basa sul CLASSPATH.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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

    Re: [JAVA] Percorso java

    Originariamente inviato da ragnonerodocet
    FileOutputStream nome_file = new FileOutputStream(new File("props/idec.prop"));

    è sbagliato immagino.
    Tecnicamente no, è perfettamente corretto. Ma è un path sul file-system e non è assoluto ma "relativo" .... relativo alla directory corrente, che è la directory che è appunto "corrente" nel momento in cui avvii la JVM. E quale sia ... dipende da come/da dove hai lanciato la applicazione. Quindi particolarmente "volubile" e dipendente dal modo di avvio della applicazione.

    Se ti va bene che sia così ... ok. Altrimenti, in base a che cosa rappresenta il file, ci possono essere diverse soluzioni:

    a) Chiedere all'utente la locazione del file (es. con JFileChooser).

    b) Usare locazioni "note" e facilmente rintracciabili programmaticamente, ad esempio la "home" directory dell'utente (vedere System.getProperty() e la proprietà "user.home").

    c) Usare altre strade per determinare il percorso del file, tramite altre configurazioni o basandosi su altro (es. stabilire e presupporre che ci sia una variabile di ambiente che indica il path o il nome del file).

    Se il file di properties fosse usato dalla tua applicazione in sola lettura, si potrebbe anche trattarlo come "risorsa" e caricarlo usando getResourceAsStream() di Class/ClassLoader.
    Ma se devi anche scriverlo, no. Le "risorse" sono di sola lettura.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: Re: [JAVA] Percorso java

    Originariamente inviato da andbin
    Ma se devi anche scriverlo, no. Le "risorse" sono di sola lettura.


    Non mi ero accorto che stava usando un FileOutputStream... ho guardato solo quel new File("props/idec.prop")



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.