Java BufferedReader

Efficient text reading with buffering capabilities

📚 What is BufferedReader?

BufferedReader reads text efficiently by buffering characters in memory. It's perfect for reading large text files line by line with better performance than basic readers.


// Basic BufferedReader example
import java.io.*;

BufferedReader br = new BufferedReader(new FileReader("text.txt"));
String line = br.readLine();
br.close();
                                    

Result:

Reads first line from 'text.txt'

BufferedReader Features

📖

Line Reading

Read text files line by line

String line = br.readLine();

Buffered I/O

Faster reading with buffer

BufferedReader br = new BufferedReader(reader);
🔤

Character Streams

Handle text data efficiently

int character = br.read();
📏

Large Files

Perfect for big text files

while ((line = br.readLine()) != null)

🔹 Basic BufferedReader Usage

Here's how to read a text file using BufferedReader:

import java.io.*;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try {
            // Create BufferedReader
            FileReader fr = new FileReader("story.txt");
            BufferedReader br = new BufferedReader(fr);
            
            // Read line by line
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            
            // Close the reader
            br.close();
            
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Output:

Once upon a time...

There was a Java programmer...

Who loved BufferedReader!

🔹 Try-with-Resources

Modern approach with automatic resource management:

import java.io.*;

public class ModernBufferedReader {
    public static void main(String[] args) {
        // Automatic resource management
        try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
            
            String line;
            int lineNumber = 1;
            
            while ((line = br.readLine()) != null) {
                System.out.println(lineNumber + ": " + line);
                lineNumber++;
            }
            
        } catch (FileNotFoundException e) {
            System.out.println("File not found!");
        } catch (IOException e) {
            System.out.println("Reading error: " + e.getMessage());
        }
        // BufferedReader is automatically closed
    }
}

Output:

1: First line of the file

2: Second line of the file

3: Third line of the file

🔹 Reading User Input

BufferedReader can also read from console input:

import java.io.*;

public class ConsoleInput {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            
            System.out.print("Enter your name: ");
            String name = br.readLine();
            
            System.out.print("Enter your age: ");
            String ageStr = br.readLine();
            int age = Integer.parseInt(ageStr);
            
            System.out.println("Hello " + name + ", you are " + age + " years old!");
            
        } catch (IOException e) {
            System.out.println("Input error: " + e.getMessage());
        } catch (NumberFormatException e) {
            System.out.println("Invalid age format!");
        }
    }
}

Output:

Enter your name: John

Enter your age: 25

Hello John, you are 25 years old!

🔹 Reading with Custom Buffer Size

You can specify buffer size for better performance:

import java.io.*;

public class CustomBufferSize {
    public static void main(String[] args) {
        try {
            // Create BufferedReader with custom buffer size (8KB)
            FileReader fr = new FileReader("largefile.txt");
            BufferedReader br = new BufferedReader(fr, 8192);
            
            String line;
            int totalLines = 0;
            
            while ((line = br.readLine()) != null) {
                totalLines++;
                // Process each line
                if (line.contains("important")) {
                    System.out.println("Found important line: " + line);
                }
            }
            
            System.out.println("Total lines processed: " + totalLines);
            br.close();
            
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Output:

Found important line: This is important data

Total lines processed: 1000

🔹 Common Methods

Important BufferedReader methods:

  • readLine() - Reads a line of text, returns null at end
  • read() - Reads single character
  • read(char[] cbuf) - Reads characters into array
  • ready() - Checks if stream is ready to read
  • skip(long n) - Skips n characters
  • close() - Closes the reader
// Method examples
BufferedReader br = new BufferedReader(new FileReader("test.txt"));

boolean ready = br.ready();       // Check if ready
String line = br.readLine();      // Read full line
int character = br.read();        // Read single character
br.skip(100);                     // Skip 100 characters
br.close();                       // Always close!

🧠 Test Your Knowledge

What does BufferedReader.readLine() return when it reaches the end of file?