R
Rishtaara
Java Fundamentals
Lesson 27 of 36Article18 min

FileInputStream, FileOutputStream, BufferedReader & BufferedWriter

Streams read/write raw bytes — good for images, PDFs, binary files.

FileInputStream & FileOutputStream — byte streams

Streams read/write raw bytes — good for images, PDFs, binary files.

FileInputStream reads; FileOutputStream writes. Always close or use try-with-resources.

Real-life example: Byte stream is a pipe carrying water drops (bytes) — works for any liquid, not just text.

Byte streams
import java.io.*;

try (FileOutputStream out = new FileOutputStream("out.bin")) {
    out.write(65); // byte 'A'
}

try (FileInputStream in = new FileInputStream("out.bin")) {
    System.out.println(in.read()); // 65
}

BufferedReader & BufferedWriter — text lines

Wrap streams for efficient text: BufferedReader reads line by line. BufferedWriter writes with buffer.

Use InputStreamReader to bridge bytes to chars: new BufferedReader(new FileReader("file.txt")).

Real-life example: BufferedReader is reading a book line by line instead of one letter at a time — faster and easier.

Buffered text I/O
import java.io.*;

try (BufferedWriter bw = new BufferedWriter(new FileWriter("log.txt"))) {
    bw.write("Line 1");
    bw.newLine();
    bw.write("Line 2");
}

try (BufferedReader br = new BufferedReader(new FileReader("log.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}