Reading Files in Java

Introduction

Hello there, Java enthusiast! Ever wondered how to read files in Java? Well, you’re in the right place. Let’s dive into the world of Java file APIs.

Understanding Java File APIs

Java provides us with some fantastic classes for file handling. We’ll be focusing on FileReader, BufferedReader, Files, and Scanner. These classes are the backbone of file reading in Java.

FileReader Class

FileReader is a class that makes reading character files a breeze. It’s as simple as opening a book and starting to read. Let’s see how it works in the next section.

BufferedReader Class

BufferedReader is like your personal assistant. It reads texts from an input stream buffering characters so as to provide efficient reading of characters, arrays, and lines. More on this later.

Scanner Class

The Scanner class is a simple text scanner. It can parse primitive types and strings using regular expressions. We’ll explore this further in the tutorial.

Reading Files in Java

There are several ways to read a file in Java. Let’s explore some of them.

Using FileReader Class

The FileReader class is quite straightforward. Here’s a simple example:

FileReader reader = new FileReader("file.txt");
int character;

while ((character = reader.read()) != -1) {
    System.out.print((char) character);
}
reader.close();
Java

In this code, we’re reading a file character by character. Simple, isn’t it?

Using BufferedReader Class

BufferedReader makes reading more efficient. Here’s how to use it:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line;

while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
reader.close();
Java

Here, we’re reading a file line by line. Efficient and easy!

Using Scanner Class

The Scanner class is another way to read a file. Let’s see it in action:

Scanner scanner = new Scanner(new File("file.txt"));

while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}
scanner.close();
Java

In this example, we’re using Scanner to read a file line by line.

Explanation of File Reading Process using a Diagram

Here is a basic sequence diagram that explains the process of reading files in Java:

Sequence diagram that explains the process of reading files in Java
Sequence diagram that explains the process of reading files in Java

The diagram illustrates the sequence of steps involved in reading files in Java:

  1. Java Developer Executes Application: The process begins when a Java developer (User) runs a Java application (JavaApp).
  2. Java Application Opens File: The Java application then opens the file that it needs to read. This is typically done using one of Java’s file reading classes, such as FileReader or Scanner.
  3. File Sends Data: Once the file is opened, the data from the file is sent to the Java application. This is typically done line by line or byte by byte, depending on the method used to read the file.
  4. Java Application Displays Data: Finally, the Java application displays the data that it read from the file. This could be output to the console, stored in a data structure for further processing, or used in some other way depending on the needs of the application.

This sequence diagram provides a high-level overview of the file reading process in Java. The specific details can vary based on the exact methods and classes used to read the file.

Reading Files from Different Locations

Reading files from different locations is also possible. Let’s see how.

Reading a File from a Directory

Here’s how to read a file from a directory:

File dir = new File("/path/to/directory");
File[] files = dir.listFiles();

for (File file : files) {
    System.out.println(file.getName());
}
Java

This code lists all files in a directory.

Reading a File from an Absolute Path

Reading a file from an absolute path is straightforward:

File file = new File("/absolute/path/to/file.txt");
Scanner scanner = new Scanner(file);

while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}
scanner.close();
Java

This code reads a file from an absolute path.

Reading a File from a Relative Path

Reading a file from a relative path is also simple:

File file = new File("relative/path/to/file.txt");
Scanner scanner = new Scanner(file);

while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}
scanner.close();
Java

This code reads a file from a relative path.

Advanced File Reading in Java

In addition to FileReader and BufferedReader, Java provides several more ways to read files, each with its own advantages and use cases. We’ll explore some of the most commonly used methods in this section.

Using the java.nio.file.Files Class

The Files class, introduced in Java 7, allows you to read all the contents of a file into a byte array or a list of strings. This method is suitable for small files when you need all the file contents in memory.

String fileName = "/path/to/your/file.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
Java

Explanation to above code for Files Class

In this example, we’re using the Files class to read a file. First, we define the file path and create a Path object. Then, we use the readAllBytes method to read the entire file into a byte array. This can be useful when you need to process the file data as raw bytes.

Next, we use the readAllLines method to read the entire file into a list of strings, with each string representing a line in the file. This is useful when you want to process the file line by line. We also specify the character encoding (UTF-8 in this case) to correctly interpret the file content.

Using the java.util.Scanner Class

The Scanner class is useful when you want to read a file line by line or based on some regular expression. It breaks its input into tokens using a delimiter pattern, which by default matches whitespace.

Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
while(scanner.hasNextLine()){
    String line = scanner.nextLine();
    System.out.println(line);
}
scanner.close();
Java

Explanation to above code for Scanner Class

In this example, we’re using the Scanner class to read a file. First, we create a Path object for the file. Then, we create a Scanner object and pass the Path object to the Scanner constructor.

The hasNextLine method checks if there’s another line in the file. If there is, the nextLine method reads that line and returns it as a string. We then print the line to the console. This process continues until there are no more lines in the file.

Finally, we close the Scanner object to free up system resources. It’s a good practice to close resources like files and scanners when you’re done with them to prevent memory leaks and other issues.

Java Read Files Examples For More Practice

Java Read Files Example 1: Reading a CSV File

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

public class CSVReader {
    public static void main(String[] args) {
        String csvFile = "/path/to/your/file.csv";
        String line;
        String csvSplitBy = ",";

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            while ((line = br.readLine()) != null) {
                String[] values = line.split(csvSplitBy);
                System.out.println("Column 1: " + values[0] + " , Column 2: " + values[1]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Java

Explanation to above code: Reading a CSV File

In this example, we’re reading a CSV file line by line. CSV stands for Comma Separated Values, which means that the values in each line of the file are separated by commas.

We use a BufferedReader to read the file. Inside the while loop, we read each line of the file with br.readLine(). If the line is not null, which means we haven’t reached the end of the file, we split the line into an array of strings with line.split(csvSplitBy). The split method separates a string into an array based on the delimiter you provide, which is a comma in this case.

Finally, we print the values of the first two columns in the CSV file with System.out.println("Column 1: " + values[0] + " , Column 2: " + values[1]).

Java Read Files Example 2: Reading a JSON File

import java.io.FileReader;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class JSONReader {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();

        try {
            Object obj = parser.parse(new FileReader("/path/to/your/file.json"));
            JSONObject jsonObject = (JSONObject) obj;
            String name = (String) jsonObject.get("name");
            System.out.println("Name: " + name);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Java

Explanation to above code: Reading a JSON File

In this example, we’re reading a JSON file. JSON stands for JavaScript Object Notation, which is a lightweight data-interchange format that is easy for humans to read and write and easy for machines to parse and generate.

We use a JSONParser to parse the JSON file. The parse method reads the entire JSON file and converts it into a Java object. We then cast this object to a JSONObject, which allows us to work with it like a regular Java object.

Finally, we retrieve the value of the “name” key in the JSON object with jsonObject.get("name") and print it to the console with System.out.println("Name: " + name).

Conclusion

Reading files in Java is a fundamental skill that every Java developer should master. With the FileReader, Files, and Scanner classes, you can handle most file reading tasks with ease.

Conclusion

And there you have it! You’ve just learned how to read files in Java. Keep practicing and happy coding!

Frequently Asked Questions (FAQ)

  1. How to read file file in Java?

    You can use FileReader, BufferedReader, or Scanner classes to read files in Java.

  2. How to read file objects in Java?

    You can use the File class to create file objects and then read them using FileReader, BufferedReader, or Scanner.

  3. Which method reads file in Java?

    The read() method of FileReader, the readLine() method of BufferedReader, and the nextLine() method of Scanner are used to read files in Java.

  4. How to read a file from a folder in Java?

    You can use the listFiles() method of the File class to get all files from a folder and then read them.

That’s all for now. Stay tuned for more fun and easy Java tutorials!

Scroll to Top