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

    Problema con azione "Save as"

    Salve a tutti,
    sto cercando di associare ad un item di un menù il classico button "save as..." (Salva con nome).
    Il punto è che il file viene salvato sempre nella medesima directory (in particolare nella directory dell'applicazione), mentre vorrei che salvasse in una directory da me scelta navigando tramite il JFileChooser.
    Il codice è il seguente:

    public void saveas()
    {
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("."));
    chooser.setFileFilter(new
    javax.swing.filechooser.FileFilter()
    {
    public boolean accept(File f)
    {
    return f.getName().toLowerCase().endsWith(".xml")
    || f.isDirectory();
    }
    public String getDescription()
    {
    return "XML File";
    }
    });
    int r = chooser.showSaveDialog(getFrame());
    if(r == JFileChooser.APPROVE_OPTION)
    {
    String name = chooser.getSelectedFile().getName() + ".xml";
    this.save(name);
    }
    }

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

    Re: Problema con azione "Save as"

    Originariamente inviato da sonoftheland
    mentre vorrei che salvasse in una directory da me scelta navigando tramite il JFileChooser.
    getSelectedFile() ritorna un File, contenente il path completo del file, compresa eventualmente l'estensione .... insomma, quello che ha scelto o digitato l'utente nel file chooser. Quindi a meno che tu debba fare cose davvero particolari, usa direttamente questo oggetto File!

    Se vuoi fare controlli extra del tipo: "se il file scelto dall'utente non ha una estensione allora aggiungo io per default .xml", si può fare ... ma non nel modo che hai fatto tu.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ...
    if(r == JFileChooser.APPROVE_OPTION)
    {
    String name = chooser.getSelectedFile().getName();
    this.save(name);
    }
    }


    Il problema è che anche impostando il codice in questo modo la cosa non funziona.
    Quando clicco "save as" mi apre il File Chooser, mi sposto nella cartella in cui voglio salvare il file xml (ad esempio la cartella "progetto" del Desktop), e scrivo il nome del file senza estensione (ad esempio lo salvo come "pippo").
    Quando clicco OK, non solo non mi ritrovo il file "pippo.xml" nella cartella "progetto" del Desktop, ma il file mi viene sistematicamente salvato in un'altra cartella (quella in cui si trovano i file della mia applicazione) e senza estensione ".xml".

    Come posso fare?
    Grazie come sempre per le pronte risposte

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sonoftheland
    String name = chooser.getSelectedFile().getName();

    Il problema è che anche impostando il codice in questo modo la cosa non funziona.
    Perché getName() restituisce il nome senza il path!

    Ripeto: quel tuo save() sarebbe appropriato che riceva un File e che tu gli passi semplicemente chooser.getSelectedFile().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Tutto ok. Risolto sostituendo a getName() il getPath con aggiunta alla variabile String dell'estensione

    String name = chooser.getSelectedFile().getPath() + ".xml";

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sonoftheland
    String name = chooser.getSelectedFile().getPath() + ".xml";
    Con getPath(), ok hai tutto il pathname. Ma il problema però è quel tuo aggiungere sempre comunque .xml. Se l'utente sceglie un file pippo.xml già esistente che vuole sovrascrivere, tu in realtà scrivi un file pippo.xml.xml. Non mi sembra molto logico ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Oops, è vero, questo non l'avevo considerato.
    Selezionando un file nell'ottica di sovrascriverlo mi ritrovo in effetti la continua aggiunta del suffisso.

  8. #8
    Ho seguito il tuo consiglio, riscrivendo il codice nel modo seguente:

    public void saveas()
    {
    if(isOpenConsumed)
    {
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("."));
    chooser.setFileFilter(new
    javax.swing.filechooser.FileFilter()
    {
    public boolean accept(File f)
    {
    return f.getName().toLowerCase().endsWith(".xml")
    || f.isDirectory();
    }
    public String getDescription()
    {
    return "XML File";
    }
    });
    int r = chooser.showSaveDialog(getFrame());
    if(r == JFileChooser.APPROVE_OPTION)
    {
    this.saveAsAction(chooser.getSelectedFile());
    }
    }
    }

    con il metodo saveAsAction seguente:

    public void saveAsAction(File aFile)
    {
    try
    {
    FileOutputStream file = new FileOutputStream(aFile);
    PrintStream out = new PrintStream(file);
    out.println("<?xml version=\"1.0\" " +
    "encoding=\"UTF-8\" standalone=\"yes\"?>");
    out.println("<fonte type=\"acqua montana\">");
    out.println("</fonte>");
    }
    catch (IOException e)
    {
    System.out.println("Errore: " + e);
    System.exit(1);
    }
    }

    Il problema è che, quando salvo, io non ottengo un file .xml ma un file generico (perchè non gli imposto che tipo di file deve essere).
    Cosa ometto?

  9. #9
    Praticamente funziona soltanto se, al salvataggio del file, inserisco anche l'estensione, ovvero

    pippo.xml

    esplicitamente.
    Se cerco di salvarlo come

    pippo

    ottengo un file generico.

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sonoftheland
    Il problema è che, quando salvo, io non ottengo un file .xml ma un file generico (perchè non gli imposto che tipo di file deve essere).
    Ma non c'è nulla da impostare .... in che senso "generico"???

    Un file XML è un file di testo. E tu tramite PrintStream/FileOutputStream scrivi del testo ... che segue la sintassi XML! Tutto qui.

    Se l'utente scrive nel file chooser pippo.xml allora hai il tuo bel file XML. Se l'utente sceglie come nome solo pippo oppure pippo.txt o peggio pippo.gif ... tu scrivi lo stesso ... e sempre contenuto XML. Solamente che la estensione non è xml .... ma questi sono affari dell'utente (generalmente).
    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.