Java BufferedReader and BufferedWriter – Complete Guide


Learn how to efficiently read and write text files in Java using BufferedReader and BufferedWriter, including examples, performance benefits, and best practices.

Buffered Streams in Java – Complete Detailed Tutorial

Buffered Streams improve I/O performance by reducing the number of read/write operations to the disk. They wrap other streams like FileReader/FileWriter to provide buffering.

  1. BufferedReader – reads text efficiently
  2. BufferedWriter – writes text efficiently

1. BufferedReader Class

  1. Reads text from a character input stream efficiently
  2. Supports reading lines using readLine()
  3. Wraps other Reader streams like FileReader

Constructor:


BufferedReader(Reader in)
BufferedReader(Reader in, int sz) // specify buffer size

Example – Reading a File Using BufferedReader


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

Key Points:

  1. readLine() reads entire line as String
  2. Efficient for large files
  3. Wraps FileReader for buffering

2. BufferedWriter Class

  1. Writes text to a character output stream efficiently
  2. Supports writing lines with newLine()
  3. Wraps other Writer streams like FileWriter

Constructor:


BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz) // buffer size

Example – Writing a File Using BufferedWriter


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

public class Main {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("Hello BufferedWriter!");
bw.newLine(); // add new line
bw.write("Efficient file writing in Java.");
} catch (IOException e) {
e.printStackTrace();
}
}
}

Key Points:

  1. newLine() adds platform-independent line separator
  2. Reduces disk write operations
  3. Buffered for better performance

3. File Copy Using Buffered Streams

Example – Copy File Using BufferedReader and BufferedWriter


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"))) {

String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}

System.out.println("File copied successfully using Buffered Streams!");
} catch (IOException e) {
e.printStackTrace();
}
}
}

Key Points:

  1. Reads line by line
  2. Writes line by line efficiently
  3. Ideal for large text files

4. Advantages of Buffered Streams

  1. Improves I/O performance
  2. Reduces disk access overhead
  3. Provides readLine() and newLine() methods
  4. Can wrap any character-based stream (FileReader, FileWriter)

5. Summary

  1. BufferedReader: efficient reading, supports readLine()
  2. BufferedWriter: efficient writing, supports newLine()
  3. Ideal for large files or frequent I/O operations
  4. Always use try-with-resources for safe closure