Comment enregistrer le fichier à l'aide de JFileChooser en Java?
J'ai code suivant. Il enregistre le fichier, mais avec un 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();
}
}
}
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de Java 7, essai d'utilisation des ressources. Voici comment vous pouvez le faire:
Essayer avec les ressources automatiquement les appels
close()
en cas d'échec ou de succès.Si vous n'êtes pas à l'aide de Java 7, n'oubliez pas d'appeler
close()
.close()
appeler automatiquementflush()
.De comprendre pourquoi vous avez besoin de rincer, vous avez besoin de comprendre comment un FileWriter œuvres. Quand vous dites
fw.write("blah")
, il se met que chaîne de caractères dans un tampon en mémoire. Une fois que vous remplissez le tampon, le FileWriter puis écrit la chaîne de caractères sur le disque dur. Il a ce comportement, car l'écriture de fichiers est beaucoup plus efficace en gros morceaux.Si vous voulez vider la mémoire tampon avant que le tampon atteint sa pleine capacité, vous devrez indiquer à l'FileWriter appeler
flush()
. L'appel deflush()
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 fait pas beaucoup d'utilisation si votre message est juste assis dans la mémoire.Une fois que vous avez terminé avec tous les flux d'e/S, vous devez appeler
close()
(à l'exception de la norme flux e/S). Cela signifie que l'OS n'a plus à maintenir ce flux. Dans certains cas, il y a un nombre limité de cours d'eau qui peuvent être ouverts, tels que les fichiers, de sorte qu'il est extrêmement important que vous n'oubliez pas de fermer.Lorsque vous appelez à proximité, en fait deux choses: il vide la mémoire tampon, puis ferme le flux. C'est pour s'assurer que rien n'est oublié avant que le flux se ferme.
Vous devez
close()
votre FileWriter.N'oubliez pas de
flush
etclose
votreFileWriter
.