Read CSV File Using Java Scanner Class
Here I am demonstrating how to read / parse CSV file using java scanner
class.
For example my csv file (user.csv) looks like below.
Rockey,22,India Bill,23,US Sonia,23,Germany
Now I am creating java class for mapping the above fields in csv file.
User.java
public class User {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
If you check the scanner class api, you can see it supports File or InputStream as input. In below code I am using File as input.
CSVParsingExample.java
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CSVParsingExample {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new File("user.csv"));
Scanner valueScanner = null;
int index = 0;
List<User> userList = new ArrayList<>();
while (scanner.hasNextLine()) {
valueScanner = new Scanner(scanner.nextLine());
valueScanner.useDelimiter(",");
User user = new User();
while (valueScanner.hasNext()) {
String data = valueScanner.next();
if (index == 0){
user.setName(data);
}
else if (index == 1){
user.setAge(Integer.parseInt(data));
}
else if (index == 2){
user.setAddress(data);
}
index++;
}
index = 0;
userList.add(user);
}
scanner.close();
System.out.println(userList);
}
}
In the above code you can see, scanner class contains nextLine(), hasNext() methods which helps to iterate the data as per our required format.
output
[User [name=Rockey, age=22, address=India], User [name=Bill, age=23, address=US], User [name=Sonia, age=23, address=Germany]]