Clean • Professional
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.logBelow are the three main classes used for text file operations:

FileReader is a character-input stream used to read text files one character at a time.
Key Features
Reads Unicode characters
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();
}
}
}
BufferedReader wraps a FileReader to provide fast and efficient reading using an internal buffer.
Key Features
Reads text line-by-line
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 lineclose() – closes the streamFileWriter is a character-output stream used to write data into text files.
Key Features
Writes text/characters
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();
BufferedWriter wraps a FileWriter and writes text efficiently using buffering.
Why Use BufferedWriter?
Faster than FileWriter alone
newLine() methodExample
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();
}
}
}
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();
}
}
}
| Class | Best Used For | Speed | Notes |
|---|---|---|---|
| FileReader | Reading characters | Slow | Good for small files |
| BufferedReader | Reading lines, large files | Fast | Most preferred |
| FileWriter | Writing characters | Medium | Overwrites file |
| BufferedWriter | Efficient writing | Fast | Supports newLine() |