How to Write a File Line by Line in Java?

This post summarizes the classes that can be used to write a file.

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();
}

This example use FileOutputStream, instead you can use FileWriter or PrintWriter which is normally good enough for a text file operations.

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. Their Differences

From Java Doc:

FileWriter is a convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.

PrintWriter prints formatted representations of objects to a text-output stream. This class implements all of the print methods found in PrintStream. It does not contain methods for writing raw bytes, for which a program should use unencoded byte streams.

The main difference is that PrintWriter offers some additional methods for formatting such as println and printf. In addition, FileWriter throws IOException in case of any I/O failure. PrintWriter methods do not throws IOException, instead they set a boolean flag which can be obtained using checkError(). PrintWriter automatically invokes flush after every byte of data is written. In case of FileWriter, caller has to take care of invoking flush.

8 thoughts on “How to Write a File Line by Line in Java?”

  1. I found this to be extremely helpful. I only wish that more guides were as clear, concise and just as simple as this one.

  2. I think you can use “n” in your string which is a “new line character”. Like:
    FileWriter fw = …
    fw.write(“line 1n” + “line 2n + “line 3n”);

Leave a Comment