OpenCsv是一个非常简单的CSV解析库,帮助我们更好处理CSV格式文件。
<!-- 使用opencsv -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.5</version>
</dependency>
样例csvtest.csv数据,格式编码为UTF-8
"name","sex","age"
"柳梦璃","女","16"
"云天河","男","17"
"韩菱纱","女","17"
"王小二","男","16,17"
根据CSVReader将文件内容读出来,注意最后一条“王小二”这条数据也能正常读出来,如果自己使用“,”分隔容易错列。
/**
* 读取一个csv文件
*/
public static void readCsv() {
String mypath = "D:\\WorkSpace\\IDEA_WorkSpace\\sortalgorithm-demos\\src\\main\\resources\\csvtest.csv";
//以","作为解析的分隔符
CSVParser csvParser = new CSVParserBuilder().withSeparator(',').build();
//使用try(){}catch()这种语法资源会自动关闭不需要自己finally里关闭资源,推荐使用
try (CSVReader readerCsv = new CSVReaderBuilder(Files.newBufferedReader(Paths.get(mypath), StandardCharsets.UTF_8)).withCSVParser(csvParser).withSkipLines(1).build()) {
String lines[];
while ((lines = readerCsv.readNext()) != null) {
Arrays.asList(lines).forEach(System.out::println);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
输出结果:
柳梦璃
女
16
云天河
男
17
韩菱纱
女
17
王小二
男
16,17
将内容输出到文件,默认CSV格式文件是以“,”隔开的。
/**
* 写数据
*/
public static void writeCsv() {
String myPath = "D:\\WorkSpace\\IDEA_WorkSpace\\sortalgorithm-demos\\src\\main\\resources\\csvouttest.csv";
String[] data1 = {"姓名", "性别", "年龄"};
String[] data2 = {"云天明", "男", "17"};
String[] data3 = {"韩菱纱", "女", "16"};
//将数据放到列表里面
List<String[]> datas = new ArrayList();
datas.add(data1);
datas.add(data2);
datas.add(data3);
//将内容输入到文件
try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(Paths.get(myPath), StandardCharsets.UTF_8),
CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.NO_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END)) {
//写数据到文件
writer.writeAll(datas);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
得到文件内容:
姓名,性别,年龄
云天明,男,17
韩菱纱,女,16