How to Read a File in Java: Top Methods Explained

Learn the most popular ways to read a file in Java. Discover three effective methods to handle file reading in Java, each with its advantages, to help you choose the best approach for your project.



Reading a File in Java

We can read a file in Java using multiple ways. Following are the three most popular ways to read a file in Java:

  • Using FileInputStream() constructor
  • Using FileReader.read() method
  • Using Files.readAllLines() method

Reading File Using FileInputStream() Constructor

FileInputStream is used for reading data from files. The object can be created using the new keyword, and there are several types of constructors available.

Syntax

The following constructor takes a file name as a string to create an input stream object to read the file:


InputStream f = new FileInputStream("C:/java/hello.txt");
        

The following constructor takes a file object to create an input stream object to read the file. First, we create a file object using File():


File f = new File("C:/java/hello.txt");
InputStream f = new FileInputStream(f);
        

Example: Reading File Using FileInputStream() Constructor

The following example demonstrates how to use FileInputStream to read a file:


package com.example;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileTest {
public static void main(String args[]) {
    try {
        byte bWrite [] = {65, 66, 67, 68, 69};
        OutputStream os = new FileOutputStream("test.txt");
        for(int x = 0; x < bWrite.length ; x++) {
        os.write( bWrite[x] );   // writes the bytes
        }
        os.close();
    
        InputStream is = new FileInputStream("test.txt");
        int size = is.available();

        for(int i = 0; i < size; i++) {
        System.out.print((char)is.read() + "  ");
        }
        is.close();
    } catch (IOException e) {
        System.out.print("Exception");
    }   
}
}
        

Output

A  B  C  D  E

Reading File Using FileReader.read() Method

FileReader.read() method of the FileReader class allows reading characters from a file:

Syntax


// Get an existing file
File file = new File("d://test//testFile1.txt");

// Read content
FileReader reader = new FileReader(file);

int c;
while ((c = reader.read()) != -1) {
char ch = (char) c;
System.out.print(ch);
}
        

Example: Reading File Using FileReader.read() Method


package com.example;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileTest {
public static void main(String args[]) {
    try {
        File file = new File("d://test//testFile1.txt");

        // Create the file
        if (file.createNewFile()) {
        System.out.println("File is created!");
        } else {
        System.out.println("File already exists.");
        } 

        // Write content
        FileWriter writer = new FileWriter(file);
        writer.write("Test data");
        writer.close();

        // Read content
        FileReader reader = new FileReader(file);

        int c;
        while ((c = reader.read()) != -1) {
        char ch = (char) c;
        System.out.print(ch);
        }
    } catch (IOException e) {
        System.out.print("Exception");
    }   
}
}
        

Output

File is created! Test data

Reading File Using Files.readAllLines() Method

Files.readAllLines() is a newer method that reads all the content of a file as a list of strings.

Syntax


List content = Files.readAllLines(Paths.get("d://test/testFile3.txt"));
        

Example: Reading File Using Files.readAllLines() Method


package com.example;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
import java.util.List;

public class FileTest {
public static void main(String args[]) {
    try {
        String data = "Test data";
        Files.write(Paths.get("d://test/testFile3.txt"), data.getBytes());
        
        List lines = Arrays.asList("1st line", "2nd line");
        Files.write(Paths.get("file6.txt"), lines, StandardCharsets.UTF_8, 
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
        
        List content = Files.readAllLines(Paths.get("d://test/testFile3.txt"));
        System.out.println(content);
        
        content = Files.readAllLines(Paths.get("file6.txt"));
        System.out.println(content);
    } catch (IOException e) {
        System.out.print("Exception");
    }   
}
}
        

Output

[Test data] [1st line, 2nd line]