Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Problema percorso file.

    Ciao a tutti,
    ho un problema con i file. Quando avvio il programma con l'IDE tutto bene. Il file me lo crea dentro la cartella del programma, ma quando lo avvio da prompt o da jar il file me lo da un' altra parte.

    codice:
     
    FileOutputStream q;
    
    ObjectOutputStream f;
    
    .....
      try {           
      
        q = new FileOutputStream("Utenti.dat");
              
            } catch (FileNotFoundException ex) {
            }
            
        try {
                f = new ObjectOutputStream(q);
            } catch (IOException ex) {
            }
        try {
                f.writeObject(utenti);
            } catch (IOException ex) {
            }
            try {
                f.flush();
            } catch (IOException ex) {
            }
            try {
                f.close();
            } catch (IOException ex) {
            }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Questo accade perchè hai specificato il nome del file senza un percorso. Questo significa che il file verrà creato nella directory corrente (chiamata anche "working directory", ovvero "directory di lavoro"). La "working directory" è la directory "attualmente" impostata (dove attualmente significa, "al momento dell'avvio dell'applicazione") e dipende dal sistema operativo.

    Se sei al prompt, la working directory è quella dove sei posizionato in quel momento nel prompt.
    Se avvii con doppio clic sul JAR la directory corrente è... boh, dipende dal sistema operativo. Solitamente è la "home" dell'utente, ma potrebbe non esserlo (potrebbe essere il desktop o altra directory).

    Quando si lavora con i file bisogna prestare sempre molta attenzione a queste cose: percorso del file e working directory.


    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
    Come faccio a specificare il percorso? Dipende da computer a computer. C'è un modo per conoscere la posizione della cartella del programma?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da ChristianC Visualizza il messaggio
    Come faccio a specificare il percorso?
    Dipende a chi serve il file e per cosa:
    - se è un file di dati trattato dall'utente, si può passarlo come argomento al main (se applicazione "console") mentre per applicazioni GUI si usa tipicamente JFileChooser o il "vecchio" FileDialog di AWT.
    - se è un file di configurazione (o altro tipo di file ad uso "privato" della applicazione), lo si può piazzare in una directory "nota", come ad esempio la "home" directory dell'utente (o sotto-cartella). La home directory si ottiene dalla system-property Java "user.home".
    Ultima modifica di andbin; 04-09-2014 a 17:09
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Se volessi mettere il file nella cartella del programma, dovrei poter conoscere il percorso di tale cartella. C'è un modo? E' un file ad uso interno comunque.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Esistono diversi modi per specificare i percorsi, già tutti illustrati diverse volte su altre discussioni.
    Si può, ad esempio, utilizzare un file di configurazione rintracciabile in una posizione nota all'applicazione (una sua sottocartella, un percorso "famoso", un percorso mappato in una variabile d'ambiente [da configurare], ecc); all'interno di questo file di configurazione si andranno a scrivere i percorsi importanti per l'applicazione... ovviamente, all'installazione dell'applicazione verrà modificato coerentemente questo file di configurazione. Questa tecnica è efficace per percorsi che sono di interesse solo per l'applicazione (come la posizione di altri programmi da sfruttare, o di file di configurazione di particolari moduli dell'applicazione, ecc).

    Si può, in alternativa, far scegliere all'utente il percorso in cui leggere/scrivere, tramite l'uso di un JFileChooser, che aprirà all'utente la classica finestra di ricerca. Questo metodo è comodo per i file dell'utente (prodotti o usati dall'applicazione), che quindi l'utente si aspetta di trovare nel posto in cui lui decide di salvarli.

    Io di solito, per i file di "configurazione" predispongo una cartella "config" allo stesso livello dell'applicazione (quindi, allo stesso livello del file JAR) e lì dentro ci metto quel che mi serve. Quindi, configurando opportunamente (tramite collegamento) l'avvio dell'applicazione, sono certo che la working-directory sia esattamente la directory dell'applicazione e sfrutto i percorsi relativi:


    codice:
    FileInputStream fis = new FileInputStream("config/file.cfg");
    
    // Leggo il "file.cfg" e recupero lì dentro i percorsi che mi servono
    ...

    In alternativa c'è il modo di risalire alla directory che contiene il JAR che è stato avviato (a patto di conoscere il nome del JAR):


    codice:
    private String getMyPath() {
       // NomeClasse è il nome della classe che si sta eseguendo
       String str = NomeClasse.class.getResource("NomeClasse.class").toExternalForm();
       String nomeJAR = ...   // Nome del JAR
       int start = 0;
       int end = str.indexOf( nomeJAR );
       if ( str.startsWith("jar:") ) {
          start = 4;
       }
    
       if (str.indexOf("file:/") >= 0) {
          start += 6;
       }
            
       str = str.substring(start, end);
       str = str.replaceAll("%20", " ");
    
       return str;
    }

    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

  7. #7
    Fantastici! Grazie

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.