Esta publicación resume las clases que se pueden usar para escribir un archivo.
1. FileOutputStream
public static void writeFile1() throws IOException { File fout = new File("out.txt"); FileOutputStream fos = new FileOutputStream(fout); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); for (int i = 0; i < 10; i++) { bw.write("something"); bw.newLine(); } bw.close(); } |
Este ejemplo usa FileOutputStream, en su lugar puede usar FileWriter o PrintWriter, que normalmente es lo suficientemente bueno para las operaciones de un archivo de texto.
2. FileWriter
public static void writeFile2() throws IOException { FileWriter fw = new FileWriter("out.txt"); for (int i = 0; i < 10; i++) { fw.write("something"); } fw.close(); } |
3. PrintWriter
public static void writeFile3() throws IOException { PrintWriter pw = new PrintWriter(new FileWriter("out.txt")); for (int i = 0; i < 10; i++) { pw.write("something"); } pw.close(); } |
4. OutputStreamWriter
public static void writeFile4() throws IOException { File fout = new File("out.txt"); FileOutputStream fos = new FileOutputStream(fout); OutputStreamWriter osw = new OutputStreamWriter(fos); for (int i = 0; i < 10; i++) { osw.write("something"); } osw.close(); } |
5. Sus diferencias
Desde Java Doc:
FileWriter es una clase práctica para escribir archivos de caracteres. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño de búfer de bytes predeterminado son aceptables. Para especificar estos valores usted mismo, construya un OutputStreamWriter en un FileOutputStream.
PrintWriter 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 debería usar flujos de bytes no codificados.
La principal diferencia es que PrintWriter ofrece algunos métodos adicionales para formatear, como println y printf. Además, FileWriter lanza IOException en caso de cualquier falla de E / S. Los métodos PrintWriter no arrojan IOException, sino que establecen una bandera booleana que se puede obtener usando checkError (). PrintWriter invoca automáticamente a flush después de que se escribe cada byte de datos. En el caso de FileWriter, la persona que llama debe encargarse de invocar flush.