Java BufferedReader & BufferedWriter
In this page:
try (BufferedReader reader = new BufferedReader(new FileReader("file_name"))) {
String line = reader.readLine();
}
Writing Lines with BufferedWriter
BufferedWriter wraps another writer (like FileWriter) and batches output in memory, flushing to disk in larger chunks instead of on every single write call — this is significantly faster for writing many lines.
Example: Writing Lines with BufferedWriter
// Import java.io.FileWriter so it can be used by its short name
import java.io.FileWriter;
// Import java.io.BufferedWriter so it can be used by its short name
import java.io.BufferedWriter;
import java.io.IOException;
// Define the class Main
public class Main {
// Program entry point: the JVM starts running here
public static void main(String[] args) throws IOException {
// Create a new BufferedWriter object and store it in writer
BufferedWriter writer = new BufferedWriter(new FileWriter("notes.txt"));
writer.write("Line one");
writer.newLine();
writer.write("Line two");
writer.close();
// Print a line to the console
System.out.println("Written");
}
}
Login to try C/C++/Java/PHP code in the editor
Reading Lines with BufferedReader
BufferedReader wraps another reader and adds readLine(), which returns a full line of text at once (or null at end-of-file) — far more convenient than reading one character at a time.
Example: Reading Lines with BufferedReader
// Import java.io.FileWriter so it can be used by its short name
import java.io.FileWriter;
// Import java.io.BufferedReader so it can be used by its short name
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
// Define the class Main
public class Main {
// Program entry point: the JVM starts running here
public static void main(String[] args) throws IOException {
// Create a new FileWriter object and store it in writer
FileWriter writer = new FileWriter("notes.txt");
writer.write("Hello\nWorld");
writer.close();
// Create a new BufferedReader object and store it in reader
BufferedReader reader = new BufferedReader(new FileReader("notes.txt"));
String line;
// Repeat while (line = reader.readLine()) != null is true
while ((line = reader.readLine()) != null) {
// Print a line to the console
System.out.println(line);
}
reader.close();
}
}
Login to try C/C++/Java/PHP code in the editor
Flushing Buffered Streams
Buffered streams don't write to disk immediately; calling flush() forces any buffered data out now, and closing the stream flushes automatically, so unflushed data is only truly lost if the program crashes before closing.
Example: Flushing Buffered Streams
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter("notes.txt"));
writer.write("Buffered data");
writer.flush(); // forces it out now
writer.close();
System.out.println("Flushed and closed");
}
}
Login to try C/C++/Java/PHP code in the editor
Exception Handling
File I/O can throw checked IOExceptions at almost any point — a missing file, a full disk, a permissions error — so buffered reads and writes need the same try-catch or try-with-resources discipline as unbuffered ones.
Example: Exception Handling
// Import java.io.BufferedReader so it can be used by its short name
import java.io.BufferedReader;
// Import java.io.FileReader so it can be used by its short name
import java.io.FileReader;
import java.io.IOException;
// Define the class Main
public class Main {
// Program entry point: the JVM starts running here
public static void main(String[] args) {
// Try code that might throw an exception
try (BufferedReader reader = new BufferedReader(new FileReader("missing.txt"))) {
// Print a line to the console
System.out.println(reader.readLine());
// Handle IOException if it was thrown
} catch (IOException e) {
// Print a line to the console
System.out.println("Caught: " + e.getClass().getSimpleName());
}
}
}
Login to try C/C++/Java/PHP code in the editor
Data Aggregation
Reading a whole file line-by-line into a List<String> or building a running total from numeric lines are typical uses for BufferedReader, since readLine() naturally breaks input into processable chunks.
Example: Data Aggregation
// Import java.io.FileWriter so it can be used by its short name
import java.io.FileWriter;
// Import java.io.BufferedReader so it can be used by its short name
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
// Define the class Main
public class Main {
// Program entry point: the JVM starts running here
public static void main(String[] args) throws IOException {
// Create a new FileWriter object and store it in writer
FileWriter writer = new FileWriter("numbers.txt");
writer.write("10\n20\n30");
writer.close();
// Create a new BufferedReader object and store it in reader
BufferedReader reader = new BufferedReader(new FileReader("numbers.txt"));
// Declare total and set it to 0
int total = 0;
String line;
// Repeat while (line = reader.readLine()) != null is true
while ((line = reader.readLine()) != null) {
total += Integer.parseInt(line);
}
reader.close();
System.out.println(total);
}
}
Login to try C/C++/Java/PHP code in the editor
- Forgetting to call
flush()orclose()on aBufferedWriter, so text is lost. - Forgetting that
readLine()returnsnullat the end of the file. - Forgetting
newLine()and joining lines together.
Chapter Quiz — Complete all 9 topics to unlock
0/9 topics done
Complete these topics first: