VOOZH about

URL: https://www.javacodegeeks.com/java-file-to-two-dimensional-array.html

⇱ Java File To Two Dimensional Array - Java Code Geeks


Handling data files is a common task in many Java applications, especially when working with structured data like tables or matrices. Let us delve into understanding how to work with a Java file containing a two-dimensional array.

1. Problem statement

Given a data file (e.g., a CSV file) containing rows and columns of information, we need to read this data into a 2D array in Java. Each row in the file should correspond to a row in the 2D array, and each value within a row should be stored in the array’s columns.

Let’s assume the data file, data.csv, contains the following sample data:

1,2,3
4,5,6
7,8,9

2. Using BufferedReader approach

BufferedReader is a basic and flexible way to read files line by line in Java. We can split each line by commas to populate a 2D array.

2.1 Code Example

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

public class BufferedReaderExample {
 public static void main(String[] args) {
 String filePath = "data.csv";
 int rows = 3;
 int cols = 3;
 int[][] data = new int[rows][cols];
 
 try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
 String line;
 int row = 0;
 while ((line = br.readLine()) != null && row < rows) {
 String[] values = line.split(",");
 for (int col = 0; col < values.length; col++) {
 data[row][col] = Integer.parseInt(values[col]);
 }
 row++;
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 
 // Display the 2D array
 for (int[] row : data) {
 for (int value : row) {
 System.out.print(value + " ");
 }
 System.out.println();
 }
 }
}

2.1.1 Code Explanation and Output

In this code, we use BufferedReader to read each line from data.csv. For each line, split() is used to separate the comma-delimited values, which are parsed as integers and stored in the 2D array. Finally, we print out the array to verify the contents.

1 2 3 
4 5 6 
7 8 9

3. Using java.nio.file.Files approach

The Files API in java.nio is a modern and concise way to read all lines from a file in one step, allowing you to directly process each line into a 2D array.

3.1 Code Example

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

public class FilesExample {
 public static void main(String[] args) {
 String filePath = "data.csv";
 int[][] data;
 
 try {
 List<String> lines = Files.readAllLines(Paths.get(filePath));
 data = new int[lines.size()][];
 
 for (int i = 0; i < lines.size(); i++) {
 String[] values = lines.get(i).split(",");
 data[i] = new int[values.length];
 
 for (int j = 0; j < values.length; j++) {
 data[i][j] = Integer.parseInt(values[j]);
 }
 }
 
 // Display the 2D array
 for (int[] row : data) {
 for (int value : row) {
 System.out.print(value + " ");
 }
 System.out.println();
 }
 
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
}

3.1.1 Code Explanation and Output

Here, Files.readAllLines() reads all lines into a List<String>. We then loop through each line, splitting it by commas and parsing it into an integer array. Each row is assigned to the 2D array. This method is concise and handles the file reading in one step.

1 2 3 
4 5 6 
7 8 9

4. Using Apache Commons CSV

For CSV files, the Apache Commons CSV library simplifies parsing and handling more complex cases (e.g., quoted fields).

First, add the dependency:

<dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-csv</artifactId>
 <version>1.9.0</version>
</dependency>

4.1 Code Example

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ApacheCSVExample {
 public static void main(String[] args) {
 String filePath = "data.csv";
 List<int[]> dataList = new ArrayList<>();
 
 try (CSVParser parser = new CSVParser(new FileReader(filePath), CSVFormat.DEFAULT)) {
 for (CSVRecord record : parser) {
 int[] row = new int[record.size()];
 for (int i = 0; i < record.size(); i++) {
 row[i] = Integer.parseInt(record.get(i));
 }
 dataList.add(row);
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 
 int[][] data = dataList.toArray(new int[0][]);
 
 // Display the 2D array
 for (int[] row : data) {
 for (int value : row) {
 System.out.print(value + " ");
 }
 System.out.println();
 }
 }
}

4.1.1 Code Explanation and Output

Using CSVParser, we read each row into an integer array and add it to a List<int[]>. The list is then converted to a 2D array. This method is highly customizable and can handle advanced CSV formats (e.g., quoted fields).

1 2 3 
4 5 6 
7 8 9

5. Comparison

ApproachDescriptionComplexityFlexibility
BufferedReaderReads files line by line and splits each line by commas to populate a 2D array.SimpleBasic CSV parsing
java.nio.file.FilesUses the Files API to read all lines at once, allowing direct processing into a 2D array.ModerateConcise and efficient
Apache Commons CSVA library that simplifies parsing CSV files, handling complex cases like quoted fields.AdvancedHighly customizable

6. Conclusion

In Java, there are multiple ways to read a file into a 2D array, each with different levels of complexity and flexibility. BufferedReader is simple and effective for basic CSV files, while java.nio.file.Files provides a streamlined approach. For advanced CSV parsing, Apache Commons CSV offers a robust solution. Choose the method that best fits your needs based on the complexity of the file format and the specific requirements of your application.

Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

Thank you!

We will contact you soon.

Tags
csv Java
πŸ‘ Photo of Yatin Batra
Yatin Batra
November 19th, 2024Last Updated: November 18th, 2024
0 528 3 minutes read

Yatin Batra

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Back to top button
Close
wpDiscuz