Java读取和写入CSV文件工具类(Bean)
1、工具类CsvUtils.java
package com.xxx.utils;
import com.xxx.csvData;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author : HMF
* @ClassName CsvUtil
* @description 读取和写入csv的工具类
* @date: 2022/2/25 21:37
**/
public class CsvUtils {
public static BufferedReader reader;
public static BufferedWriter bw;
public static int linkNumber;
public static void closeAll() {
try {
if(reader != null)
reader.close();
if(bw != null)
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取CSV格式的文档数据
* @param filePath CSV格式的文件路劲
* @return dataList csv数据读取放入二维list中。
*/
public static List<List<String>> readCSVFileData(String filePath){
List<List<String>> dataList=new ArrayList<>();
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
}catch(FileNotFoundException | UnsupportedEncodingException e){
e.printStackTrace();
}
try{
String line=null;
while ((line=reader.readLine())!=null){
String aa[]=line.split(",");
List<String> cellList= Arrays.asList(aa);
//System.out.println(cellList);
dataList.add(cellList);
}
closeAll();
} catch (Exception e) {
e.printStackTrace();
}
return dataList;
}
public static List<csvData> readData(String filePath){
List<List<String>> dataList=readCSVFileData(filePath);
System.out.println(dataList);
List<csvData> csvList=new ArrayList<>();
for(int i = 0; i<dataList.size(); i++){
if(i !=0) {
csvData data=new csvData();
data.setId(Integer.parseInt(dataList.get(i).get(0)));
data.setName(dataList.get(i).get(1));
data.setAge(Integer.parseInt(dataList.get(i).get(2)));
csvList.add(data);
}
}
return csvList;
}
/**
* 读取CSV格式的文档数据
* @param filePath CSV格式的文件路劲
* @param data 需要写入的数据
* @return dataList csv数据读取放入二维list中。
*/
public static void writeCSVFileData(String filePath, csvData data){
try {
bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath, true), "UTF-8"));
if(linkNumber==0){
bw.write("编号"+","+"姓名"+","+"年龄");
bw.newLine();
++linkNumber;
}
bw.write(data.getId()+","+data.getName()+","+data.getAge());
bw.newLine();
bw.flush();
closeAll();
} catch (Exception e) {
closeAll();
e.printStackTrace();
System.exit(0);
}
}
}
2、实体类csvData.java
这里示例有3个字段:id,name,age
package com.xxx;
/**
* @author : HMF
* @ClassName csvData
* @description 数据
* @date: 2022/2/26 18:03
**/
public class csvData {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
data.csv数据
3、执行类
import java.util.ArrayList;
import java.util.List;
import com.xxx.csvData;
import com.xxx.utils.CsvUtils;
/**
* @author : HMF
* @ClassName ReadFileTest
* @description TODO
* @date: 2022/2/25 21:37
**/
public class ReadFileTest {
public static void main(String[] args) {
//读取
List<csvData> csvList=CsvUtils.readData("./data.csv");
for (int i=0;i<csvList.size();i++) {
System.out.println(csvList.get(i).getId()+" "+csvList.get(i).getName()+" "+csvList.get(i).getAge());
}
//写入
List<csvData> csvList2=new ArrayList<>();
csvData a1=new csvData();
a1.setId(1);
a1.setName("张三");
a1.setAge(25);
csvList2.add(a1);
csvData a2=new csvData();
a2.setId(2);
a2.setName("李四");
a2.setAge(30);
csvList2.add(a2);
for (csvData data:csvList2) {
//System.out.println(data.getId()+" "+data.getName()+" "+data.getAge());
CsvUtils.writeCSVFileData("./result.csv", data);
}
}
}
执行结果: