MAVEN依赖包
<!--easyexcel依赖--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.29</version></dependency>
demo代码
package com.example.demoeasyexcel.read;import java.io.File;
import java.util.List;
import java.util.Map;import com.alibaba.excel.EasyExcel;import lombok.extern.slf4j.Slf4j;/*** 读的常见写法** @author Jiaju Zhuang*/@Slf4j
public class ReadTest {public static void main(String[] args) {String fileName = "D:\\新建文本文档.csv";// 这里 需要指定读用哪个class去读,然后读取第一个sheetEasyExcel.read(fileName, ExceptionDemoData.class, new DemoExceptionListener()).sheet().doRead();}}
com.alibaba.excel.read.builder.ExcelReaderSheetBuilder#doRead
com.alibaba.excel.ExcelReader#read(java.util.List<com.alibaba.excel.read.metadata.ReadSheet>)
com.alibaba.excel.analysis.ExcelAnalyser#analysis
com.alibaba.excel.analysis.ExcelAnalyserImpl#analysis
com.alibaba.excel.analysis.ExcelReadExecutor#execute
com.alibaba.excel.analysis.csv.CsvExcelReadExecutor#execute
往后用了org.apache.commons.csv中的CSVParser来读取excel
============
所以直接再写个org.apache.commons.csv的demo
package com.example.demoeasyexcel.read;import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class CsvReaderDemo {public static void main(String[] args) {String fileName = "D:\\新建文本文档.csv";try {Reader reader = new FileReader(fileName);// Create a CSVParser with the appropriate formatCSVFormat aDefault = CSVFormat.DEFAULT;CSVParser csvParser = new CSVParser(reader,aDefault);// Loop through each record (row) in the CSV filefor (CSVRecord record : csvParser) {// Access data from each record by column index or column nameString column1Value = record.get(0); // Get data from the first columnString column2Value = record.get(1); // Get data from the second column// and so on...// Process or print the data as neededSystem.out.println("Column 1: " + column1Value + ", Column 2: " + column2Value);}// Close the CSVParser and underlying ReadercsvParser.close();reader.close();} catch (IOException e) {e.printStackTrace();}}
}
在CSVFormat aDefault = CSVFormat.DEFAULT;这行代码中,指定了后续读取CSV文件的一些规则,比如分隔符(delimiter)是逗号,每行数据的分隔符(recordSeparator)是CRLF(\r\n)。
开始迭代读取
org.apache.commons.csv.CSVParser#nextRecord
org.apache.commons.csv.Lexer#nextToken
每次读一个char
org.apache.commons.csv.Lexer#parseSimpleToken
拼接完成
token.content.append((char) ch);
ch = reader.read(); // continue