C

Core Java tutorial for beginners

Clean • Professional

Text File I/O in Java – Reading & Writing Using Character Streams

3 minute

Text File I/O in Java Using Character Streams

Java provides character-stream classes in the java.io package to read and write text-based files. These classes are ideal for working with:

  • .txt
  • .csv
  • .json
  • .xml
  • .log

Below are the three main classes used for text file operations:

learn code with durgesh images

1. FileReader (Reading Text Files Character-by-Character)

FileReader is a character-input stream used to read text files one character at a time.

Key Features

  • Reads Unicode characters

  • Best for small-size files
  • Simple and easy to use
  • Not optimized for large files

Example

import java.io.FileReader;

public class FileReaderExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("input.txt")) {
            int ch;
            while ((ch = fr.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. BufferedReader (Efficient Text Reading)

BufferedReader wraps a FileReader to provide fast and efficient reading using an internal buffer.

Key Features

  • Reads text line-by-line

  • Much faster than FileReader
  • Great for large files, logs, CSVs

Example

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

public class BufferedReaderExample {
    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 (Exception e) {
            e.printStackTrace();
        }
    }
}

Important Methods

  • read() – reads a single character

  • readLine() – reads entire line
  • close() – closes the stream

3. FileWriter (Writing Text Files)

FileWriter is a character-output stream used to write data into text files.

Key Features

  • Writes text/characters

  • Overwrites file by default
  • Can append to existing file

Example

import java.io.FileWriter;

public class FileWriterExample {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("output.txt")) {
            fw.write("Hello, Java!\\n");
            fw.write("Writing using FileWriter.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Append Mode

FileWriter fw = new FileWriter("output.txt", true);
fw.write("\\nAppending new data...");
fw.close();

4. BufferedWriter (Optional but Important)

BufferedWriter wraps a FileWriter and writes text efficiently using buffering.

Why Use BufferedWriter?

  • Faster than FileWriter alone

  • Supports newLine() method
  • Ideal for writing large text files

Example

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

public class BufferedWriterExample {
    public static void main(String[] args) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            bw.write("Hello World!");
            bw.newLine();
            bw.write("Writing using BufferedWriter.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. Full Example (Copy File using Character Streams)

import java.io.*;

public class CopyFile {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("source.txt");
             FileWriter fw = new FileWriter("destination.txt")) {

            int ch;
            while ((ch = fr.read()) != -1) {
                fw.write(ch);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

When to Use What?

ClassBest Used ForSpeedNotes
FileReaderReading charactersSlowGood for small files
BufferedReaderReading lines, large filesFastMost preferred
FileWriterWriting charactersMediumOverwrites file
BufferedWriterEfficient writingFastSupports newLine()

Points to Remember

  • FileReader → Reads characters one-by-one
  • BufferedReader → Reads text efficiently (best for large files)
  • FileWriter → Writes characters to a file
  • BufferedWriter → Writes text faster using a buffer
  • Use try-with-resources for automatic closing
  • Use append mode when you don't want to overwrite

Article 0 of 0