Ejemplo de Java FileWriter

Java FileWriter

  • La clase FileWriter de Java es parte del paquete java.io.
  • FileWriter es una subclase de la clase java.io.OutputStreamWriter.
  • FileWriter está destinado a escribir secuencias de caracteres.
  • Se utiliza FileWriter para escribir en archivos de caracteres. Sus métodos write() te permiten escribir caracteres o cadenas en un archivo.
  • Por lo general, los FileWriter son envueltos por objetos Writer de nivel superior, como BufferedWriter o PrintWriter, que ofrecen un rendimiento mejorado y métodos más flexibles de nivel superior para escribir datos.

Constructores de FileWriter

  1. FileWriter(File file): Crea un objeto FileWriter utilizando el objeto File especificado. Lanza una excepción IOException si el archivo existe pero es un directorio en lugar de un archivo regular, o si no existe pero no se puede crear, o no se puede abrir por cualquier otro motivo.
  2. FileWriter(File file, boolean append): Crea un objeto FileWriter utilizando el objeto File especificado. Si el segundo argumento es verdadero, entonces los bytes se escribirán al final del archivo en lugar del principio. Lanza una IOException si el archivo existe pero es un directorio en lugar de un archivo regular o no existe pero no se puede crear, o no se puede abrir por cualquier otra razón.
  3. FileWriter(FileDescriptor fd): Crea un objeto FileWriter asociado con el descriptor de archivo especificado.
  4. FileWriter(String fileName): Crea un objeto FileWriter utilizando el nombre de archivo especificado. Lanza un IOException si el archivo con el nombre especificado existe pero es un directorio en lugar de un archivo regular o no existe pero no se puede crear, o no se puede abrir por cualquier otra razón.
  5. FileWriter(String fileName, boolean append): Crea un objeto FileWriter utilizando el nombre de archivo especificado con un booleano que indica si añadir los datos escritos. Si el segundo argumento es verdadero, entonces los datos se escribirán al final del archivo en lugar del principio. Lanza una IOException si el archivo con el nombre especificado existe pero es un directorio en lugar de un archivo regular o no existe pero no se puede crear, o no se puede abrir por cualquier otra razón.

Ejemplo de Java FileWriter

FileWriter hereda el método de las clases java.io.OutputStreamWriter y java.io.Writer. Echemos un vistazo a los siguientes métodos con ejemplos.

write(int c)

Este método escribe un único carácter especificado por int c.

package com.journaldev.io.filewriter;

import java.io.FileWriter;
import java.io.IOException;

/**
 * Java write file using FileWriter write method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteIntExample {

	public static void main(String[] args) {
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter("D:/data/file.txt");
			//método heredado de java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileWriter != null) {
					fileWriter.flush();
					fileWriter.close();					
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

FileWriter implementa la interfaz AutoCloseable, por lo tanto, podemos usar try with resources al utilizar la clase FileWriter.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write method using try with resource
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteIntTryWithResource {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Nota: En el programa anterior, fileWriter.write(65) escribirá A en el archivo porque 65 es el valor decimal para el carácter A, por lo tanto, el entero 65 se convertirá en el carácter A, y lo mismo para los demás.

write(String str, int off, int len)

Este método escribe una parte de la cadena str desde el índice off hasta la longitud len.

  • str: Cadena que se va a escribir
  • off: Desplazamiento desde el cual comenzar a leer caracteres
  • len: Número de caracteres a escribir

Si el valor del parámetro len es negativo, entonces no se escriben caracteres.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  s,  int  off,  int  len) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteStringExample {

	public static void main(String[] args) {
		String data = "This is FileWriter Example.";
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char[] cbuf, int off, int len)

Este método escribe una porción de una matriz de caracteres especificada por char[] cbuf desde int off hasta int len.

  • cbuf: Una matriz de caracteres
  • off: Desplazamiento desde el cual comenzar a leer caracteres
  • len: Número de caracteres a escribir
package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf,  int  off,  int  len) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteCharArray {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char[] cbuf)

Este método escribe la matriz de caracteres especificada por cbuf.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteCharArrayExample {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.Writer 
			fileWriter.write(data);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(String str)

Este método escribe un valor de cadena en el archivo especificado por str.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  str) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteString {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.Writer 
			fileWriter.write("JournalDev");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

append(char c)

Este método añade el carácter especificado a este escritor donde c es el carácter de 16 bits a añadir.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter append(char c) method
 * 
 * @author pankaj
 *
 */
public class FileWriterAppendCharacter {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.Writer 
			fileWriter.write("JournalDev");
			fileWriter.append('C');
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

flush()

Este método vacía el flujo. Cuando se llama al método flush(), escribe inmediatamente los datos en el archivo de salida.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter flush() method
 * 
 * @author pankaj
 *
 */
public class FileWriterFlushExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.Writer 
			fileWriter.write("JournalDev");
			//método heredado de java.io.OutputStreamWriter
			fileWriter.flush();
			
			fileWriter.write(" Tutorials");
			fileWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

close()

Este método vacía el flujo antes de cerrarlo. Una vez que el flujo ha sido cerrado, la invocación del método write() o flush() provocará que se lance una IOException. Cerrar un flujo previamente cerrado no tiene ningún efecto.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter close() method
 * 
 * @author pankaj
 *
 */
public class FileWriterCloseExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método heredado de java.io.Writer 
			fileWriter.write("JournalDev");
			//método heredado de java.io.OutputStreamWriter
			fileWriter.close();;
			
			fileWriter.write(" Tutorials");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Salida:

java.io.IOException: Stream closed
	at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at java.io.OutputStreamWriter.write(Unknown Source)
	at java.io.Writer.write(Unknown Source)
	at com.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)

FileWriter vs FileOutputStream

  • FileWriter está destinado a escribir secuencias de caracteres mientras que FileOutputStream se utiliza para escribir secuencias de bytes sin procesar.
  • FileWriter maneja caracteres de 16 bits, mientras que FileOutputStream maneja bytes de 8 bits.
  • FileWriter puede manejar cadenas Unicode, mientras que FileOutputStream escribe bytes en un archivo y no acepta caracteres o cadenas, por lo que necesita ser envuelto por OutputStreamWriter para aceptar cadenas.

También puedes consultar java write file para obtener más información sobre cómo escribir archivos en Java. Eso es todo sobre Java FileWriter, espero que no se haya pasado por alto nada importante.

Puedes descargar todo el código de los ejemplos desde nuestro Repositorio de GitHub.

Referencia: Documentación de la API

Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example