Reading and Writing Files in Java: A Comprehensive Guide

File I/O (Input/Output) is one of the fundamental tasks in programming. Java, with its rich libraries, provides multiple ways to read from and write to files. Each method has its own advantages, suitable for different use cases. Let’s delve into the most common methods Java offers for file manipulation.

1. Using FileInputStream and FileOutputStream

Reading from a File:

import java.io.FileInputStream;
import java.io.IOException;

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

Writing to a File:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileWriter {
    public static void main(String[] args) {
        String content = "Hello, World!";
        try (FileOutputStream fos = new FileOutputStream("output.txt")) {
            fos.write(content.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Benefits:

  • Low-level I/O operations, providing flexibility.
  • Good for binary data.

Drawbacks:

  • Might be cumbersome for text data.

2. Using BufferedReader and BufferedWriter

Reading from a File:

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

public class TextFileReader {
    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();
        }
    }
}

Writing to a File:

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

public class TextFileWriter {
    public static void main(String[] args) {
        String content = "Hello, World!";
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            bw.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Benefits:

  • Efficient for reading and writing text data.
  • Provides buffering, which improves performance for frequent I/O operations.

Drawbacks:

  • Not suitable for binary data.

3. Using Java’s NIO package

Java’s NIO (New I/O) package offers a more modern I/O API:

Reading from a File:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class NIOReader {
    public static void main(String[] args) {
        try {
            List<String> lines = Files.readAllLines(Paths.get("input.txt"));
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Writing to a File:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

public class NIOWriter {
    public static void main(String[] args) {
        List<String> content = Arrays.asList("Hello,", "World!");
        try {
            Files.write(Paths.get("output.txt"), content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Benefits:

  • Simplified syntax.
  • Provides asynchronous I/O operations.
  • Good performance, especially for larger files.

Leave a Comment

Your email address will not be published. Required fields are marked *