⏹官方API
- http://javacsv.sourceforge.net/
⏹依赖
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
⏹ 一.CSV写入
import java.io.File;
import java.nio.charset.Charset;
import com.csvreader.CsvWriter;
// ⏹创建一个临时文件对象
File tempFile = File.createTempFile("临时文件名称", "");
/*
参数1: 临时文件地址
参数2: csv文件分隔符
参数3: csv文件编码(为了显示日文中"髙,島"等特殊汉字,需要使用MS932编码)
*/
CsvWriter csvWriter = new CsvWriter(tempFile.getCanonicalPath(), ',', Charset.forName("MS932"));
// 指定CSV文件标题
String[] headers = {"标题1", "标题2", "标题3"};
// ⏹将标题写入CSV文件中
csvWriter.writeRecord(headers);
// ⏹内容写入方法1
List<Person> personList = Arrays.asList(new Person(), new Person(), new Person());
try {
for (Person person : personList) {
csvWriter.write(person.getId());
csvWriter.write(person.getName());
csvWriter.write(person.getAge());
// 当一行写入完成之后,调用换行
csvWriter.endRecord();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭CSV写入对象
csvWriter.close();
}
// ⏹内容写入方法2
try {
for (Person person : personList) {
// 直接写入一行
csvWriter.writeRecord(new String[] {person.getId(), person.getName(), person.getAge()});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭CSV写入对象
csvWriter.close();
}
⏹ 二.CSV读取
import com.csvreader.CsvReader;
import java.nio.charset.Charset;
// 因为读取的是日文CSV,所以指定为MS932,而非utf-8
CsvReader csvReader = new CsvReader("CSV文件路径", ',', Charset.forName("MS932"));
// ⏹获取出当前CSV文件所有的表头信息
String[] headers = csvReader.getHeaders();
// ⏹获取出当前CSV文件所有的表头的数量
int headerCount = csvReader.getHeaderCount();
// 跳过表头(相当于读取完了表头)
csvReader.readHeaders();
// 读取每行的内容
while (csvReader.readRecord()) {
// ⏹获取当前行,第2列的内容
String value1 = csvReader.get(2);
// ⏹获取当前行标题为URL的内容
String value2 = csvReader.get("URL");
// ⏹获取当前行的所有数据(以分隔符分隔的当前行的所有数据)
String rawRecord = csvReader.getRawRecord();
// ⏹获取当前行的所有数据(数组形式)
String[] values = csvReader.getValues();
}
// 读取完成之后,关闭流
csvReader.close();
参考资料
1.https://www.cnblogs.com/quanxiaoha/p/12632681.html
2.https://blog.csdn.net/qq_40308101/article/details/107834893