本文将为你介绍如果使用Java的Scanner类来读取或者解析CSV文件。
我的CSV文件(user.csv)内容如下
Rockey,22,India Bill,23,US Sonia,23,Germany
接下来我们首先从创建映射上述属性的实体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 + "]"; } }
如果你查看Scanner的API,你会发现该类支持文件和输入流作为输入方式,本例中我们采用文件的方式。
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); } }
从上面代码可以看出,Scanner的nextLine(), hasNext() 方法可以很方便的帮助我们迭代数据,转化成我们想要的格式。
输出
[User [name=Rockey, age=22, address=India], User [name=Bill, age=23, address=US], User [name=Sonia, age=23, address=Germany]]