La méthode suivante écrit uniquement le dernier élément que j'ai ajouté, elle ne s'ajoute pas aux entrées précédentes. Qu'est-ce que je fais mal?
public void addNew() {
try {
PrintWriter pw = new PrintWriter(new File("persons.txt"));
int id = Integer.parseInt(jTextField.getText());
String name = jTextField1.getText();
String surname = jTextField2.getText();
Person p = new Person(id,name,surname);
pw.append(p.toString());
pw.append("sdf");
pw.close();
} catch (FileNotFoundException e) {...}
}
Le fait que la méthode de PrintWriter
soit appelée append()
ne signifie pas qu'elle change le mode du fichier en cours d'ouverture.
Vous devez également ouvrir le fichier en mode ajout:
PrintWriter pw = new PrintWriter(new FileOutputStream(
new File("persons.txt"),
true /* append = true */));
Notez également que le fichier sera écrit avec l'encodage par défaut du système. Ce n'est pas toujours souhaité et peut provoquer des problèmes d'interopérabilité, vous pouvez spécifier explicitement l'encodage des fichiers.
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));
true
est l'indicateur d'ajout. Voir documentation .
Ouvrez le fichier en mode ajout, comme avec le code suivant:
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"), true));
À mon humble avis, la réponse acceptée ne tient pas compte du fait que l'intention est d'écrire des caractères. (Je sais que le sujet est ancien, mais puisque en cherchant le même sujet, je suis tombé sur ce post avant de trouver la solution recommandée, je poste ici.)
À partir des documents FileOutputStream
, vous utilisez FileOutputStream
lorsque vous souhaitez imprimer des octets.
FileOutputStream est destiné à l'écriture de flux d'octets bruts tels que des données d'image. Pour écrire des flux de caractères, pensez à utiliser FileWriter.
En outre, à partir des BufferedWriter
docs :
Sauf si une sortie rapide est requise, il est conseillé d'enrouler un BufferedWriter autour de tout Writer dont les opérations write () peuvent être coûteuses, telles que FileWriters et OutputStreamWriters.
Enfin, la réponse serait la suivante (comme mentionné dans cet autre article StackOverFlow ):
PrintWriter out = null; try { out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true))); out.println("the text"); }catch (IOException e) { System.err.println(e); }finally{ if(out != null){ out.close(); } }
De plus, à partir de Java 7, vous pouvez utiliser une instruction try-with-resources. Aucun bloc finally n'est requis pour fermer la ou les ressources déclarées car elles sont gérées automatiquement et sont également moins verbeux:
try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) { out.println("the text"); }catch (IOException e) { System.err.println(e); }