.CSV文件是以逗号分割的数据仓储,读取数据时从每一行中读取一条数据元祖,也就是一条数据,再用字符分割的方式获取表中的每一个数据项。
package com.conn.csv;
import java.io.BufferedReader;
import java.io.FileReader;
/**
* @desc: 读取csv文件
* @author: tzconn@163.com
* @time: 2018年3月22日16:22:41
*/
public class TestRead {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("*.csv"));//换成你的文件名
reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉
String line = null;
while((line=reader.readLine())!=null){
String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
String last = item[item.length-1];//这就是你要的数据了
//int value = Integer.parseInt(last);//如果是数值,可以转化为数值
System.out.println(last);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
写入数据则注意数据逗号分隔的格式,以文件写入的方式即可。
package com.conn.csv;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
/**
* @desc: 写入数据到csv文件
* @author: tzconn@163.com
* @time: 2018年3月22日16:26:32
*/
public class WriteCSV {
public static void main(String[] args) {
try {
File csv = new File("D:/writers.csv"); // CSV数据文件
BufferedWriter bw = new BufferedWriter(new FileWriter(csv, true)); // 附加
// 添加新的数据行
bw.write("\"张三\"" + "," + "\"2000\"" + "," + "\"2004\"");
bw.newLine();
bw.close();
} catch (FileNotFoundException e) {
// File对象的创建过程中的异常捕获
e.printStackTrace();
} catch (IOException e) {
// BufferedWriter在关闭对象捕捉异常
e.printStackTrace();
}
}
}
以上内容参考自博客:https://blog.csdn.net/tzconn/article/details/79655892
在读取CSV文件并以“,”切割的时候,会出现一个问题:如果单元格内容中含有英文的逗号,那就会把单元格内的内容也切割开,解决办法如下:
String item[] = line.trim().split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)",-1);
这个正则表达式的含义是避免切割英文双引号内的英文逗号,原因是因为csv文件的单元格中有英文逗号的话,单元格的内容实际上是会被英文双引号包括起来。这个双引号使用excel打开的时候是看不到的,但是如果读进程序里就可以看到了(或者使用notepad++这样的编辑器打开也可以看到),所以我们可以使用这个正则表达式来解决切分单元格内容的问题。