java - sobreescribir - printwriter para que sirve
El método de anexión de PrintWriter no se agrega (4)
El siguiente método solo escribe el último elemento que agregué, no se agrega a las entradas anteriores. ¿Qué estoy haciendo 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) {...}
}
Abra el archivo en modo de adición, como con el siguiente código:
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"), true));
El hecho de que el método de PrintWriter
se llame append()
no significa que cambie el modo del archivo que se abre.
También debe abrir el archivo en el modo de adición:
PrintWriter pw = new PrintWriter(new FileOutputStream(
new File("persons.txt"),
true /* append = true */));
También tenga en cuenta que el archivo se escribirá en la codificación predeterminada del sistema. No siempre es deseable y puede causar problemas de interoperabilidad, es posible que desee especificar la codificación de archivos explícitamente.
En mi humilde opinión, la respuesta aceptada no tiene en cuenta el hecho de que la intención es escribir caracteres. (Sé que el tema es antiguo, pero desde que busqué el mismo tema me encontré con esta publicación antes de encontrar la solución recomendada, la publico aquí).
Desde los documentos FileOutputStream
, utiliza FileOutputStream
cuando desea imprimir bytes.
FileOutputStream está diseñado para escribir flujos de bytes sin formato, como datos de imágenes. Para escribir secuencias de caracteres, considere usar FileWriter.
Además, de los documentos BufferedWriter
:
A menos que se requiera una pronta salida, es recomendable envolver un BufferedWriter alrededor de cualquier Escritor cuyas operaciones de escritura () puedan ser costosas, como FileWriters y OutputStreamWriters.
Finalmente, la respuesta sería la siguiente (como se menciona en esta otra publicación de ):
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(); } }
Además, a partir de Java 7, puede usar una declaración try-with-resources. No se requiere un bloqueo final para cerrar los recursos declarados porque se maneja automáticamente y también es menos detallado:
try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) { out.println("the text"); }catch (IOException e) { System.err.println(e); }
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));
El true
es el indicador de agregar. Ver documentation .