La diferencia entre java.io.PrintWriter y java.io.BufferedWriter?


Por favor, mira el código a continuación:

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

¿Cuál es la diferencia entre estos dos métodos?

¿Cuándo debemos usar PrintWriter sobre BufferedWriter?

Author: Tom Cammann, 2009-11-17

8 answers

Http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html y http://java.sun.com/javase/6/docs/api/java/io/PrintWriter.html detallar las diferencias.

La razón principal para usar el PrintWriter es obtener acceso a los métodos printXXX (como println(int)). Usted puede utilizar esencialmente un PrintWriter para escribir a un archivo apenas como usted utilizaría el sistema.a escribir en la consola.

Un BufferedWriter es una forma eficiente de escribir en un archivo (o cualquier cosa else) ya que almacenará los caracteres en la memoria Java antes de (probablemente, dependiendo de la implementación) caer a C para hacer la escritura en el archivo.

No existe tal concepto como un "PrintReader" lo más cercano que obtendrá es probablemente java.útil.Escaner.

 50
Author: TofuBeer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-05 02:41:11

PrintWriter da más métodos (println), pero la diferencia más importante (y preocupante) a tener en cuenta es que se traga excepciones.

Puede llamar a checkError más adelante para ver si se han producido errores, pero normalmente usaría PrintWriter para cosas como escribir en la consola, o en aplicaciones "quick 'n dirty" donde no desea ser molestado por excepciones (y donde la confiabilidad a largo plazo no es un problema).

No estoy seguro de por qué las "habilidades de formato extra" y " no los aspectos" swallow exceptions " están agrupados en la misma clase-el formato es obviamente útil en muchos lugares donde no quiere que las excepciones sean tragadas. Sería bueno ver BufferedWriter obtener las mismas habilidades en algún momento...

 75
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-24 02:17:12

Como se dijo en la respuesta de TofuBeer, ambos tienen sus especialidades. Para aprovechar al máximo el PrintWriter (o cualquier otro escritor), pero también usar la escritura en búfer, puede envolver el Búferedwriter con el necesario como este:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));
 8
Author: Kai Huppmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-17 07:07:32

PrintWriter solo expone los métodos de impresión en cualquier Escritor en modo de caracteres.

BufferedWriter es más eficiente que , según sus métodos buffered. Y viene con un método newLine (), dependiendo de la plataforma de su sistema, para manipular archivos de texto correctamente.

El BufferedReader permite leer un texto desde un archivo, con bytes convertidos en caracteres. Permite leer línea por línea.

No hay PrintReader, tienes que elegir otra implementación de lector de acuerdo con el formato de su entrada.

 6
Author: Lioda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-17 07:15:35

En general, un escritor envía su salida inmediatamente a la secuencia de caracteres o bytes subyacente. A menos que se requiera una salida rápida, es aconsejable envolver un BufferedWriter alrededor de cualquier Escritor cuyas operaciones write() puedan ser costosas, como los FileWriters y OutputStreamWriters. Por ejemplo,

Nota: El contenido del texto en los bloques de código se envuelve automáticamente en palabras

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

Almacenará en búfer la salida del impresor en el archivo. Sin buffering, cada invocación de una impresión() método podría causar que los caracteres se convierten en bytes que luego se escriben inmediatamente en el archivo, que puede ser muy ineficiente.

 2
Author: Rohit Goyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-13 10:23:26

BufferedWriter - Escribe texto en un flujo de caracteres de salida, almacenando caracteres en búfer desde un flujo de caracteres. PrintWriter-Imprime representaciones formateadas de objetos a un flujo de salida de texto.

 0
Author: Vidyut Singhai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-15 12:22:20

PrintWriter es el escritor más mejorado para escribir datos de caracteres en un archivo.

La principal ventaja de PrintWriter sobre FileWriter y BufferedWriter es:

  1. PrintWriter puede comunicarse directamente con el archivo, y también puede comunicarse a través de algún objeto Writer.

PrintWriter printwriter = new PrintWriter("blah.txt");

(o)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. Podemos escribir cualquier tipo de datos primitivos directamente en el archivo (porque tenemos versiones adicionales sobrecargadas de PrintWriter métodos es decir, print () y println()).

    printwriter.print(65); //65
    bufferedwriter.write(65); //A
    printwriter.println(true); //true

 0
Author: Syed Maqsood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 21:33:00

Creo que la razón detrás de usar PrintWriter ya se mencionó anteriormente, pero una de las razones importantes es que pasa un objeto de archivo directamente al constructor PrintWriter, lo que facilita su uso.

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);
 -1
Author: AjayLohani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-20 07:25:57