使用net.sourceforge.javacsv操作CSV文件

本文详细介绍了如何使用Java CSV库进行CSV文件的读写操作。首先,展示了如何添加依赖并创建CSVWriter对象来写入标题和内容。接着,通过两种方式演示了如何写入数据到CSV文件。在读取部分,讲解了如何初始化CsvReader,获取表头,读取每一行数据,并从中提取特定列的内容。最后,确保在读写完成后正确关闭流。
摘要由CSDN通过智能技术生成

⏹官方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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值