直接上代码
引入maven
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.8</version> <!-- 检查最新的版本 -->
</dependency>
具体代码,如图是最简单的全量读取
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
public class CSVReaderExample {
public static void main(String[] args) {
try {
// 指定CSV文件的路径
File csvFile = new File("path/to/your/csvfile.csv");
// 使用FileReader和CSVParser读取文件
try (CSVParser parser = CSVParser.parse(csvFile, Charset.defaultCharset(), CSVFormat.DEFAULT)) {
// 遍历CSV记录
for (CSVRecord record : parser) {
// 访问字段,字段名由CSV文件的第一行决定
String field1 = record.get("FieldName1");
String field2 = record.get("FieldName2");
// 或者使用基于索引的方式访问字段
String field1ByIndex = record.get(0);
String field2ByIndex = record.get(1);
// 打印或处理字段
System.out.println(field1 + ", " + field2);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
涉及到指定列的读取,当然你也可以全量读取再过滤(可能造成对象过大,内存溢出)
import java.io.FileReader;
import java.io.IOException;
import java.util.stream.Collectors;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
public class CSVFilterWithStreamExample {
public static void main(String[] args) {
try (CSVParser parser = CSVParser.parse("path/to/your/file.csv", Charset.defaultCharset(), CSVFormat.DEFAULT.withFirstRecordAsHeader())) {
// 使用流和Lambda表达式过滤记录
parser.stream()
.filter(record -> "someCondition".equals(record.get("ColumnName"))) // 这里可以替换为你自己的过滤条件
.forEach(record -> {
String colName1 = record.get("ColumnName1");
String colName2 = record.get("ColumnName2");
// 处理colName1和colName2
System.out.println(colName1 + ": " + colName2);
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
同时需要存入数据库的话,可能涉及到内存管理,线程池的使用,每次循环后清除对象等操作