Por favor, mire 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 deberíamos usar PrintWriter sobre BufferedWriter?
fuente
PrintWriter
da más métodos (println
), pero la diferencia más importante (y preocupante) a tener en cuenta es que se traga las excepciones .Puede llamar
checkError
más tarde para ver si se ha producido algún error, pero normalmente lo usaríaPrintWriter
para cosas como escribir en la consola, o en aplicaciones "rápidas y sucias" donde no desea que le molesten las excepciones (y donde la confiabilidad a largo plazo no es un problema).No estoy seguro de por qué los aspectos de "capacidades adicionales de formato" y "no aceptar excepciones" están agrupados en la misma clase; el formato es obviamente útil en muchos lugares donde no desea que se traguen las excepciones. Sería bueno ver
BufferedWriter
obtener las mismas habilidades en algún momento ...fuente
PrintStream
es unOutputStream
.PrintWriter
es unWriter
.IOException
, en el que cada otra abstracción IO (Reader
,Writer
etc) declara que sus métodos emitenIOException
si algo va mal -PrintWriter
no.Como se dice en la respuesta de TofuBeer, ambos tienen sus especialidades. Para aprovechar al máximo PrintWriter (o cualquier otro escritor) pero también usar la escritura en búfer, puede envolver el BufferedWriter con el que necesita de esta manera:
fuente
PrinterWriter
ya crea un archivoBufferedWriter
.PrintWriter simplemente expone los métodos de impresión en cualquier Writer en modo de caracteres.
BufferedWriter es más eficiente que, de acuerdo con sus métodos almacenados en búfer. Y viene con un método newLine (), dependiendo de la plataforma de su sistema, para manipular archivos de texto correctamente.
BufferedReader permite leer un texto desde un archivo, con bytes convertidos en caracteres. Permite leer línea por línea.
No hay PrintReader, debe elegir otra implementación de Reader de acuerdo con el formato de su entrada.
fuente
PrintWriter es el editor más mejorado para escribir datos de caracteres en un archivo.
La principal ventaja de PrintWriter sobre FileWriter y BufferedWriter es:
PrintWriter printwriter = new PrintWriter("blah.txt");
(o)
Podemos escribir cualquier tipo de datos primitivos directamente en el archivo (porque tenemos versiones adicionales sobrecargadas de los métodos PrintWriter, es decir, print () y println ()).
printwriter.print(65); //65
bufferedwriter.write(65); //A
printwriter.println(true); //true
fuente
En general, un escritor envía su salida inmediatamente al carácter subyacente o al flujo de bytes. A menos que se requiera una salida rápida, es aconsejable envolver un BufferedWriter alrededor de cualquier Writer cuyas operaciones write () puedan ser costosas, como FileWriters y OutputStreamWriters. Por ejemplo,
Nota: el contenido de texto en los bloques de código se ajusta automáticamente a las palabras
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
almacenará la salida del PrintWriter en el archivo. Sin almacenamiento en búfer, cada invocación de un método print () haría que los caracteres se convirtieran en bytes que luego se escribirían inmediatamente en el archivo, lo que puede ser muy ineficiente.
fuente
BufferedWriter: escribe texto en un flujo de caracteres de salida y almacena en búfer los caracteres de un flujo de caracteres. PrintWriter: imprime representaciones formateadas de objetos en un flujo de salida de texto.
fuente
Creo que la razón detrás del uso de PrintWriter ya se mencionó anteriormente, pero una de las razones importantes es que pasa un objeto de archivo directamente al constructor de PrintWriter, lo que facilita su uso.
fuente