Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [JAVA] Ottenere directory di salvataggio tramite JFileChooser

    Ciao a tutti,
    per selezionare la directory dove salvare un file txt creato tramite un'altra classe ho pensato di utilizzare jfilechooser, ecco il codice:

    codice:
    if (jFileChooserSave.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)             try {                 
         dir = jFileChooserSave.getSelectedFile().getCanonicalPath();            
    } catch (IOException ex) {                       Logger.getLogger(FileChooser.class.getName()).log(Level.SEVERE, null, ex);             }
    Il problema è che passando dir come path per la creazione del file, l'operazione non funziona e salva il file stesso nella cartella di default, come mai?
    Dove sbaglio?

  2. #2
    Ah volevo precisare che il problema si verifica solo sotto Win, con Mac tutto perfetto.

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

    Re: [JAVA] Ottenere directory di salvataggio tramite JFileChooser

    Originariamente inviato da nicolo_conte
    codice:
    dir = jFileChooserSave.getSelectedFile().getCanonicalPath();
    Il problema è che passando dir come path per la creazione del file, l'operazione non funziona e salva il file stesso nella cartella di default, come mai?
    Innanzitutto, purtroppo, non hai spiegato e fatto vedere dove usi quel 'dir'. Ma c'è comunque una cosa che secondo me hai equivocato.

    getSelectedFile() del JFileChooser ti fornisce un oggetto File che rappresenta un file (nel caso di chooser che sceglie file) e fin qui sicuramente l'hai capito. getCanonicalPath() non ti fornisce la sola directory escludendo il nome xxx.yyy del file!!! No, ti fornisce il path completo "canonico". Quindi in 'dir' non hai una directory ma ancora sempre il nome del file!

    Path qui indica in generale un "pathname", una forma generale di percorso a file o directory.

    Se volevi proprio solo la directory dovevi fare:

    jFileChooserSave.getSelectedFile().getParent()

    e nota che il percorso fornito dal chooser è già sempre "assoluto".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Praticamente uso quel "dir" qui:

    codice:
    output = new Formatter(dir + filename + ".txt");
    Quindi "dir" dovrebbe contenere la directory selezionata con jfilechooser o sbaglio? Utilizzando .getParent() come da te suggerito al posto della selezione "c:\users\miousername\Desktop" ottengo "c:\users\miousername" . La cosa strana è che la stessa cosa funziona prfettamente su MAC.

    Grazie mille per l'aiuto.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nicolo_conte
    Quindi "dir" dovrebbe contenere la directory selezionata con jfilechooser o sbaglio?
    Come ho detto, getCanonicalPath() non ti dà (come il nome potrebbe far credere) solo la directory togliendo il nome .... ti dà il path canonico completo di file.

    Originariamente inviato da nicolo_conte
    Utilizzando .getParent() come da te suggerito al posto della selezione "c:\users\miousername\Desktop" ottengo "c:\users\miousername" . La cosa strana è che la stessa cosa funziona prfettamente su MAC.
    getParent() non ti fornisce il separatore finale quindi dovresti metterlo tu prima di concatenare il filename.

    E comunque, scusa, perché fai tutto questo giro? Quel filename da dove arriva? Quello che intendo dire: spiega perché non puoi/vuoi prendere il File che ti fornisce direttamente getSelectedFile() e passarlo al Formatter.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Praticamente sto utilizzando jfilechooser per salvare questo file, cioè ottenere la directory dove l'utente vuole salvare il file ottenuto tramite formatter. Non posso selezionare il file poichè questo non esiste ancora. Ho letto che getselectedfile() restituisce anche una directory nel caso questa sia selezionata. Giusto?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nicolo_conte
    Non posso selezionare il file poichè questo non esiste ancora.
    E allora?? Non capisco il dubbio/questione. Con showSaveDialog() tu puoi selezionare un file che non necessariamente è già presente fisicamente sul file-system.
    E un oggetto File (che può rappresentare un file esistente o no sul file-system) se lo passi a Formatter, beh, tanto lo tronca o lo crea comunque!

    Originariamente inviato da nicolo_conte
    Ho letto che getselectedfile() restituisce anche una directory nel caso questa sia selezionata. Giusto?
    Se il JFileChooser è stato configurato con selection mode JFileChooser.DIRECTORIES_ONLY, allora ti permette di selezionare le sole directory.

    Ma lasciamo perdere questo .... vediamo la questione a monte, a livello generale. Ripeto la domanda: cosa ti "disturba" o impedisce di usare direttamente il File fornito da getSelectedFile()???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Probabilmente non mi è chiara una cosa: jfilechooser è impostato su DIRECTORYS_ONLY e showsavedialog(). Quindi selezionando la cartella che desidero e facendo .getselectedfile() ottendo un file che non è "ancora" presente sul fs e quindi teoricamente potrei passarlo al metodo che implementa il Formatter. Giusto? Come posso fare? E per modificare il nome del file da creare (questo deve essere definito dal sistema e non dall'utente)?

    Grazie mille ancora una volta!

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nicolo_conte
    Probabilmente non mi è chiara una cosa: jfilechooser è impostato su DIRECTORYS_ONLY e showsavedialog().
    Non ho mai provato la accoppiata DIRECTORYS_ONLY e showSaveDialog() ... dovrei provare (2 minuti e provo...). Se anche ti permettesse di stabilire una directory che non esiste ancora, dovresti comunque crearla poi tu con mkdir().

    Non puoi appendergli il nome di file e pensare di aprire/creare il file se non c'è "fisicamente" la directory!!

    Originariamente inviato da nicolo_conte
    (questo deve essere definito dal sistema e non dall'utente)?
    Se non è l'utente che può scegliere il nome di file, allora va bene che fai scegliere all'utente solo la directory.

    Ma a questo punto non fare giri "strani" con concatenazioni, separatori o cose simili. Uno dei costruttori di File accetta un File "parent" e un String "child"

    File f = new File(tuaDirDaChooser, tuoNomeFile);

    e poi passi f a Formatter.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Grazie mille, finisco una cosa al volo e faccio una prova.

    Ti tengo aggiornato.


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 © 2026 vBulletin Solutions, Inc. All rights reserved.