Comment sauvegarder un fichier en utilisant JFileChooser en Java? [fermé]

j'ai le code suivant. Il sauve le dossier mais avec le contenu vide. Quel est le problème avec elle?

public void saveMap() {
    String sb = "TEST CONTENT";
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("/home/me/Documents"));
    int retrival = chooser.showSaveDialog(null);
    if (retrival == JFileChooser.APPROVE_OPTION) {
        try {
            FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
            fw.write(sb.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
18
demandé sur mKorbel 2013-01-29 22:09:01

3 réponses

si vous utilisez Java 7, utilisez try with resources. Voici comment vous pouvez le faire:

try(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) {
    fw.write(sb.toString());
}

Essayez avec les ressources automatiquement les appels close() en cas d'échec ou de succès.

si vous n'utilisez pas Java 7, n'oubliez pas d'appeler close(). close() appellera automatiquement flush().

...
fw.close();
...

pour comprendre pourquoi vous devez tirer la chasse, vous devez comprendre comment fonctionne un FileWriter. Quand vous dites fw.write("blah"), il met en fait cette chaîne dans un tampon mémoire. Une fois que vous avez rempli le tampon, le FileWriter écrit la chaîne sur le disque dur. Il a ce comportement, car l'écriture de fichiers est beaucoup plus efficace en gros morceaux.

si vous voulez vider le buffer avant que le buffer atteigne sa capacité, vous devrez le dire au FileWriter en appelant flush(). Appel de flush() peut également être très important lors de la communication, comme l'internet, parce que vous aurez besoin de rincer avant l'autre extrémité peut voir votre message. Il ne le fera pas beaucoup utiliser si votre message est juste assis dans la mémoire.

une fois que vous avez terminé avec n'importe quel flux d'E/S, vous devez appeler close() (à l'exception des flux d'E/S standard). Cela signifie que L'OS n'a plus besoin de maintenir ce flux. Dans certains cas, il y a un nombre limité de flux qui peuvent être ouverts, comme avec des fichiers, il est donc extrêmement important que vous n'oubliez pas de fermer.

quand vous appelez près, il fait en fait deux choses: il vide le tampon et puis ferme le flux. Il s'agit de s'assurer que rien n'est laissé derrière avant la fermeture du cours d'eau.

19
répondu Ryan Amos 2013-01-29 18:30:01

N'oubliez pas de flush et closeFileWriter.

4
répondu Dan D. 2013-01-29 18:11:41

Vous devez close() votre FileWriter.

3
répondu SLaks 2013-01-29 18:11:25