Solución:
Según coderanch.com, si combinamos las respuestas obtenemos:
FileWriter es la representación de caracteres de IO. Eso significa que se puede usar para escribir caracteres. Internamente, FileWriter usaría el juego de caracteres predeterminado del sistema operativo subyacente y convertiría los caracteres a bytes y los escribiría en el disco.
PrintWriter y FileWriter.
Similitudes
- Ambos se extienden desde Writer.
- Ambas son clases de representación de caracteres, lo que significa que trabajan con caracteres y los convierten en bytes utilizando el juego de caracteres predeterminado.
Diferencias
- FileWriter lanza IOException en caso de cualquier falla de IO, esta es una excepción marcada.
- Ninguno de los métodos PrintWriter arroja IOExceptions, en su lugar, establecen una bandera booleana que se puede obtener usando checkError ().
- PrintWriter tiene un constructor opcional que puede usar para habilitar el vaciado automático cuando se llaman métodos específicos. No existe tal opción en FileWriter.
- Al escribir en archivos, FileWriter tiene un constructor opcional que le permite agregar al archivo existente cuando se llama al método “write ()”.
Diferencia entre PrintStream y OutputStream: similar a la explicación anterior, simplemente reemplace el carácter por el byte.
PrintWriter tiene los siguientes métodos:
close()
flush()
format()
printf()
print()
println()
write()
y los constructores son:
File (as of Java 5)
String (as of Java 5)
OutputStream
Writer
mientras que FileWriter tiene los siguientes métodos:
close()
flush()
write()
y los constructores son:
File
String
Enlace: http://www.coderanch.com/t/418148/java-programmer-SCJP/certification/Information-PrintWriter-FileWriter
Ambos usan un FileOutputStream
internamente:
public PrintWriter(File file) throws FileNotFoundException {
this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
false);
}
public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}
pero la principal diferencia es que PrintWriter ofrece métodos especiales:
Imprime representaciones formateadas de objetos en un flujo de salida de texto. Esta clase implementa todos los métodos de impresión que se encuentran en PrintStream. No contiene métodos para escribir bytes sin formato, para lo cual un programa debe usar flujos de bytes no codificados.
A diferencia de la clase PrintStream, si el vaciado automático está habilitado, se realizará solo cuando se invoque uno de los métodos println, printf o format, en lugar de cuando se genere un carácter de nueva línea. Estos métodos utilizan la propia noción de separador de línea de la plataforma en lugar del carácter de nueva línea.
A PrintWriter
tiene un concepto diferente de manejo de errores. Necesitas llamar checkError()
en lugar de usar bloques try / catch.