Core Java

Write/Read CSV Files in Java Example

In this example we are going to demonstrate how to Write/Read CSV files. CSV (Comma Separated Values) is a file format for data storage which looks like a text file, contains information which is organized with one record on each line and each field is separated by comma.

A CSV file is primarily used in database migration process where we can transport data between two databases of different formats through a computer program.

There are many ways to write and read CSV files in java where we can use a native java or an open source 3rd Party tool like OpenCSV, Apache Commons CSV and Super CSV.

So, Let’s see how we can write and read a simple CSV file using the native java code.

1. POJO to map the CSV File:

We create this simple POJO to contain the student data like id, firstName, lastName, gender and age.

Student.java:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.jcg;
 
/**
 * @author ashraf
 *
 */
public class Student {
     
    private long id;
    private String firstName;
    private String lastName;
    private String gender;
    private int age;
    /**
     * @param id
     * @param firstName
     * @param lastName
     * @param gender
     * @param age
     */
    public Student(long id, String firstName, String lastName, String gender,
            int age) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.gender = gender;
        this.age = age;
    }
    /**
     * @return the id
     */
    public long getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }
    /**
     * @return the firstName
     */
    public String getFirstName() {
        return firstName;
    }
    /**
     * @param firstName the firstName to set
     */
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    /**
     * @return the lastName
     */
    public String getLastName() {
        return lastName;
    }
    /**
     * @param lastName the lastName to set
     */
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    /**
     * @return the gender
     */
    public String getGender() {
        return gender;
    }
    /**
     * @param gender the gender to set
     */
    public void setGender(String gender) {
        this.gender = gender;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
     
    @Override
    public String toString() {
        return "Student [id=" + id + ", firstName=" + firstName
                + ", lastName=" + lastName + ", gender=" + gender + ", age="
                + age + "]";
    }
}

2. Write to CSV File:

CsvFileWriter creates a comma separated value format “CSV” file from a set of students data and save it in your home directory. Firstly, it writes the CSV file header, and then it writes the students data using FileWriter class.

CsvFileWriter.java:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package com.jcg;
 
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author ashraf
 *
 */
public class CsvFileWriter {
     
    //Delimiter used in CSV file
    private static final String COMMA_DELIMITER = ",";
    private static final String NEW_LINE_SEPARATOR = "\n";
     
    //CSV file header
    private static final String FILE_HEADER = "id,firstName,lastName,gender,age";
 
    public static void writeCsvFile(String fileName) {
         
        //Create new students objects
        Student student1 = new Student(1, "Ahmed", "Mohamed", "M", 25);
        Student student2 = new Student(2, "Sara", "Said", "F", 23);
        Student student3 = new Student(3, "Ali", "Hassan", "M", 24);
        Student student4 = new Student(4, "Sama", "Karim", "F", 20);
        Student student5 = new Student(5, "Khaled", "Mohamed", "M", 22);
        Student student6 = new Student(6, "Ghada", "Sarhan", "F", 21);
         
        //Create a new list of student objects
        List students = new ArrayList();
        students.add(student1);
        students.add(student2);
        students.add(student3);
        students.add(student4);
        students.add(student5);
        students.add(student6);
         
        FileWriter fileWriter = null;
                 
        try {
            fileWriter = new FileWriter(fileName);
 
            //Write the CSV file header
            fileWriter.append(FILE_HEADER.toString());
             
            //Add a new line separator after the header
            fileWriter.append(NEW_LINE_SEPARATOR);
             
            //Write a new student object list to the CSV file
            for (Student student : students) {
                fileWriter.append(String.valueOf(student.getId()));
                fileWriter.append(COMMA_DELIMITER);
                fileWriter.append(student.getFirstName());
                fileWriter.append(COMMA_DELIMITER);
                fileWriter.append(student.getLastName());
                fileWriter.append(COMMA_DELIMITER);
                fileWriter.append(student.getGender());
                fileWriter.append(COMMA_DELIMITER);
                fileWriter.append(String.valueOf(student.getAge()));
                fileWriter.append(NEW_LINE_SEPARATOR);
            }
 
             
             
            System.out.println("CSV file was created successfully !!!");
             
        } catch (Exception e) {
            System.out.println("Error in CsvFileWriter !!!");
            e.printStackTrace();
        } finally {
             
            try {
                fileWriter.flush();
                fileWriter.close();
            } catch (IOException e) {
                System.out.println("Error while flushing/closing fileWriter !!!");
                e.printStackTrace();
            }
             
        }
    }
}

Let’s see how the generated student.csv file is organized, it contains the header and the students data below.

student.csv:

1
2
3
4
5
6
7
id,firstName,lastName,gender,age
1,Ahmed,Mohamed,M,25
2,Sara,Said,F,23
3,Ali,Hassan,M,24
4,Sama,Karim,F,20
5,Khaled,Mohamed,M,22
6,Ghada,Sarhan,F,21

3. Read from CSV File:

CsvFileReader reads the CSV file in java using BufferedReader class then skipping the header and starting from the second line, we split each line using String.split() function. A String.split() function splits string around matches of the given regular expression. Finally, we create a new list of student and print it.

CsvFileReader.java:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.jcg;
 
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author ashraf_sarhan
 *
 */
public class CsvFileReader {
     
    //Delimiter used in CSV file
    private static final String COMMA_DELIMITER = ",";
     
    //Student attributes index
    private static final int STUDENT_ID_IDX = 0;
    private static final int STUDENT_FNAME_IDX = 1;
    private static final int STUDENT_LNAME_IDX = 2;
    private static final int STUDENT_GENDER = 3;
    private static final int STUDENT_AGE = 4;
     
    public static void readCsvFile(String fileName) {
 
        BufferedReader fileReader = null;
      
        try {
             
            //Create a new list of student to be filled by CSV file data
            List students = new ArrayList();
             
            String line = "";
             
            //Create the file reader
            fileReader = new BufferedReader(new FileReader(fileName));
             
            //Read the CSV file header to skip it
            fileReader.readLine();
             
            //Read the file line by line starting from the second line
            while ((line = fileReader.readLine()) != null) {
                //Get all tokens available in line
                String[] tokens = line.split(COMMA_DELIMITER);
                if (tokens.length > 0) {
                    //Create a new student object and fill his  data
                    Student student = new Student(Long.parseLong(tokens[STUDENT_ID_IDX]), tokens[STUDENT_FNAME_IDX], tokens[STUDENT_LNAME_IDX], tokens[STUDENT_GENDER], Integer.parseInt(tokens[STUDENT_AGE]));
                    students.add(student);
                }
            }
             
            //Print the new student list
            for (Student student : students) {
                System.out.println(student.toString());
            }
        }
        catch (Exception e) {
            System.out.println("Error in CsvFileReader !!!");
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                System.out.println("Error while closing fileReader !!!");
                e.printStackTrace();
            }
        }
 
    }
 
}

4. Run the Example:

CsvWriteReadTest is the main class to run CsvFileWriter and CsvFileReader for the given CSV file.

CsvWriteReadTest.java:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.jcg;
 
/**
 * @author ashraf
 *
 */
public class CsvWriteReadTest {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
         
        String fileName = System.getProperty("user.home")+"/student.csv";
         
        System.out.println("Write CSV file:");
        CsvFileWriter.writeCsvFile(fileName);
         
        System.out.println("\nRead CSV file:");
        CsvFileReader.readCsvFile(fileName);
 
    }
 
}

Output:

01
02
03
04
05
06
07
08
09
10
Write CSV file:
CSV file was created successfully !!!
 
Read CSV file:
Student [id=1, firstName=Ahmed, lastName=Mohamed, gender=M, age=25]
Student [id=2, firstName=Sara, lastName=Said, gender=F, age=23]
Student [id=3, firstName=Ali, lastName=Hassan, gender=M, age=24]
Student [id=4, firstName=Sama, lastName=Karim, gender=F, age=20]
Student [id=5, firstName=Khaled, lastName=Mohamed, gender=M, age=22]
Student [id=6, firstName=Ghada, lastName=Sarhan, gender=F, age=21]

5. Download the Source Code of this example:

This was an example of how to to Write/Read CSV files.

Download
You can download the full source code of this example here: Write/Read CSV Files Example Code

Ashraf Sarhan

Ashraf Sarhan is a passionate software engineer, an open source enthusiast, has a Bsc. degree in Computer and Information Systems from Alexandria University. He is experienced in building large, scalable and distributed enterprise applications/service in multiple domains. He also has a keen interest in JavaEE, SOA, Agile and Big Data technologies.
Subscribe
Notify of
guest


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

9 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
George Shapiro
George Shapiro
7 years ago

Now try it with data containing newlines and embedded commas.

Sourov
Sourov
7 years ago

Thanks for your blog. It helped me a lot. Can you help me to solve the problem of parsing a CSV cell which contains multiple comma(,)?

sunil
sunil
7 years ago

where file will get store after writing successfully .

sumit sain
sumit sain
6 years ago

thanks

jot
jot
6 years ago

where file will get store after writing successfully .

Shaikh Sanah
Shaikh Sanah
4 years ago

I’m facing Type mismatch error
for (Student student : students)

nivedita
nivedita
4 years ago
Reply to  Shaikh Sanah

i’m facing the same issue

max
max
3 years ago
Reply to  Shaikh Sanah

same here

Sravya
Sravya
2 years ago
Reply to  max

List<Student> students =

new ArrayList();
This will work

Back to top button