El método de agregar PrintWriter no se agrega

3 minutos de lectura

El metodo de agregar PrintWriter no se agrega
snnlankrdsm

El siguiente método solo escribe el último elemento que he agregado, 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) {...}
}

1643746386 403 El metodo de agregar PrintWriter no se agrega
axtavt

El hecho de que PrintWriterEl método de se llama append() no significa que cambie el modo del archivo que se está abriendo.

También debe abrir el archivo en 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á con la codificación predeterminada del sistema. No siempre se desea y puede causar problemas de interoperabilidad, es posible que desee especificar la codificación de archivos de forma explícita.

  • Esto es como despertar el hilo dormido, lo siento mucho. Pero tengo una duda. ¿Cómo agregaría la operación en el archivo si solo me dan un objeto de archivo y no puedo usar clases de flujo (por ejemplo, FileOutputStream, etc.)? Lo que tengo permitido es: Printwriter pw = new PrintWriter(file); : Intenté agregar(), escribir(), imprimir(). ¿Hay algún método listo para agregar en este escenario?

    usuario1707035

    11 abr.


  • Como aclaración, el método ‘append()’ de PrintWriter se refiere al hecho de que se agrega al Writer, es decir, a sí mismo, es decir, a su propio flujo de salida, y no al archivo.

    – Abraham Felipe

    26 mayo 2015 en 06:10

  • Y con referencia a la pregunta de @ user1707035, no, parece que no puede usar un PrintWriter para agregar sin construirlo con un objeto OutputStream. Esto se debe a que PrintWriter abre la secuencia en el momento de su instanciación, y los únicos constructores que admiten Archivo o nombre de archivo como argumento abren el Archivo mediante la construcción interna de un objeto OutputStream sin el parámetro ‘agregar’. Referencia (documentos): docs.oracle.com/javase/7/docs/api/java/io/…

    – Abraham Felipe

    26 mayo 2015 en 06:15

PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));

El true es el indicador de adición. Ver documentación.

El metodo de agregar PrintWriter no se agrega
sumit singh

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)); 

1643746386 252 El metodo de agregar PrintWriter no se agrega
marcelocra

En mi humilde opinión, la respuesta aceptada no considera el hecho de que la intención es escribir caracteres. (Sé que el tema es antiguo, pero dado que mientras buscaba el mismo tema me encontré con esta publicación antes de encontrar la solución recomendada, la publico aquí).

Desde el FileOutputStream documentostu usas FileOutputStream cuando quieras imprimir bytes.

FileOutputStream está diseñado para escribir flujos de bytes sin procesar, como datos de imágenes. Para escribir flujos de caracteres, considere usar FileWriter.

Además, desde el BufferedWriter documentos:

A menos que se requiera una salida rápida, se recomienda incluir un BufferedWriter alrededor de cualquier Writer cuyas operaciones write() puedan ser costosas, como FileWriters y OutputStreamWriters.

Finalmente, la respuesta sería la siguiente (como se menciona en esta otra publicación de 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();
    }
} 

Además, a partir de Java 7, puede usar una declaración de prueba con recursos. No se requiere un bloque finalmente 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);
}

1643746387 744 El metodo de agregar PrintWriter no se agrega
neeraj kumar

No necesita duplicar el almacenamiento en búfer como se muestra en todas las demás respuestas. Simplemente puedes hacer

PrintWriter pw = new PrintWriter(new FileWriter("persons.txt",true));

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad