How to read and parse CSV file in Java

CSV stands for Comma Seperated Values. A CSV file is used for data storage, it looks like a normal text file containing organised information seperated by a delimiter Comma. There are many ways of Reading and Parsing a CSV file, in this example we will look into the below three methods

  1. Using BufferedReader and String.split()
  2. Using Scanner of Java Util package
  3. Using 3rd party library like OpenCSV


We will be reading the Employee.csv

EmployeeID,FirstName,LastName,Salary
1,FirstName1,LastName1,10000
2,FirstName2,LastName2,20000
3,FirstName3,LastName3,30000
4,FirstName4,LastName4,40000
5,FirstName5,LastName5,50000

Employee.java

Before getting into parsing stuff, we have a pojo called Employee to hold Employee details such as EmpId, FirstName, LastName, Salary.

package com.javainterviewpoint;

public class Employee 
{
    private int empId;
    private String firstName;
    private String lastName;
    private int salary;
    
    public Employee(int empId, String firstName, 
                     String lastName, int salary) {
        super();
        this.empId = empId;
        this.firstName = firstName;
        this.lastName = lastName;
        this.salary = salary;
    }
    
    public int getEmpId() {
        return empId;
    }
    public void setEmpId(int empId) {
        this.empId = empId;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee [empId=" + empId + ", firstName=" + firstName
                + ", lastName=" + lastName + ", salary=" + salary + "]";
    }
}

1. Using Buffered Reader and String.split()

BufferedReader we will read the CSV file and String.split() method will split the string into token based on the delimiter passed which is COMMA here

package com.javainterviewpoint;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReadCSVFile_BufferedReader 
{
	//Delimiters used in the CSV file
    private static final String COMMA_DELIMITER = ",";
    
    public static void main(String args[])
    {
        BufferedReader br = null;
        try
        {
            //Reading the csv file
            br = new BufferedReader(new FileReader("Employee.csv"));
            
            //Create List for holding Employee objects
            List<Employee> empList = new ArrayList<Employee>();
            
            String line = "";
            //Read to skip the header
            br.readLine();
            //Reading from the second line
            while ((line = br.readLine()) != null) 
            {
                String[] employeeDetails = line.split(COMMA_DELIMITER);
                
                if(employeeDetails.length > 0 )
                {
                    //Save the employee details in Employee object
                    Employee emp = new Employee(Integer.parseInt(employeeDetails[0]),
                            employeeDetails[1],employeeDetails[2],
                            Integer.parseInt(employeeDetails[3]));
                    empList.add(emp);
                }
            }
            
            //Lets print the Employee List
            for(Employee e : empList)
            {
                System.out.println(e.getEmpId()+"   "+e.getFirstName()+"   "
                		+e.getLastName()+"   "+e.getSalary());
            }
        }
        catch(Exception ee)
        {
            ee.printStackTrace();
        }
        finally
        {
            try
            {
                br.close();
            }
            catch(IOException ie)
            {
                System.out.println("Error occured while closing the BufferedReader");
                ie.printStackTrace();
            }
        }
    }
}

Output :

1   FirstName1   LastName1   10000
2   FirstName2   LastName2   20000
3   FirstName3   LastName3   30000
4   FirstName4   LastName4   40000
5   FirstName5   LastName5   50000

2. Using Scanner of Java Util package

Scanner breaks the input into tokens based on the delimiter passed(Default is White Space), here we are using COMMA as delimieter.

package com.javainterviewpoint;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadCSV_Scanner 
{
	//Delimiters used in the CSV file
	private static final String COMMA_DELIMITER = ",";
	
	public static void main(String args[])
	{
		 
		Scanner scanner = null;
		try {
			//Get the scanner instance
			scanner = new Scanner(new File("Employee.csv"));
			//Use Delimiter as COMMA
			scanner.useDelimiter(COMMA_DELIMITER);
			while(scanner.hasNext())
			{
					System.out.print(scanner.next()+"   ");
			}
		} 
		catch (FileNotFoundException fe) 
		{
			fe.printStackTrace();
		}
		finally
		{
			scanner.close();
		}
	}
}

Output :

EmployeeID   FirstName   LastName   Salary
1   FirstName1   LastName1   10000
2   FirstName2   LastName2   20000
3   FirstName3   LastName3   30000
4   FirstName4   LastName4   40000
5   FirstName5   LastName5   50000

3. Using OpenCSV

OpenCSV is a Third party library, it gives better handliling to parse a CSV file.

package com.javainterviewpoint;

import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import au.com.bytecode.opencsv.CSVReader;

public class WriteCSV_OpenCSV 
{
    public static void main(String args[])
    {
        CSVReader csvReader = null;
        
        try
        {
            /**
             * Reading the CSV File
             * Delimiter is comma
             * Start reading from line 1
             */
            csvReader = new CSVReader(new FileReader("Employee.csv"),',','"',1);
            //employeeDetails stores the values current line
            String[] employeeDetails = null;
            //Create List for holding Employee objects
            List<Employee> empList = new ArrayList<Employee>();
            
            while((employeeDetails = csvReader.readNext())!=null)
            {
              //Save the employee details in Employee object
                Employee emp = new Employee(Integer.parseInt(employeeDetails[0]),
                        employeeDetails[1],employeeDetails[2],
                        Integer.parseInt(employeeDetails[3]));
                empList.add(emp);
            }
        
        //Lets print the Employee List
        for(Employee e : empList)
        {
            System.out.println(e.getEmpId()+"   "+e.getFirstName()+"   "
                    +e.getLastName()+"   "+e.getSalary());
        }
        }
        catch(Exception ee)
        {
            ee.printStackTrace();
        }
    }
}

Output :

1   FirstName1   LastName1   10000
2   FirstName2   LastName2   20000
3   FirstName3   LastName3   30000
4   FirstName4   LastName4   40000
5   FirstName5   LastName5   50000

asdfsadf

Leave a Reply

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