使用Fast-csv,实现Springboot 读取 csv文件 介绍

模块介绍 ?

fast-csv是一款开源软件包,主要用来处理csv格式的文本数据,就是一种有固定格式的文本文件。fast-csv是一个流式的推式解析器,即收到一段数据就解析一段数据,不需要收完全部的数据才开始解析。推式就是每一行,每一个字段都全部都解析出来,不论你最后用了还是不用。

如何使用?

在pom.xml中添加依赖信息:

<dependency>
            <groupId>de.siegmar</groupId>
            <artifactId>fastcsv</artifactId>
            <version>1.0.3</version>
</dependency>

代码工具类实现:

import de.siegmar.fastcsv.reader.CsvContainer; import de.siegmar.fastcsv.reader.CsvParser; import de.siegmar.fastcsv.reader.CsvReader; import de.siegmar.fastcsv.reader.CsvRow; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; * @author : Jone * @date : 10:18 2021/11/11 0011 * @function : @Component public class CsvRead { public static void csvReadOperation(String path) { // File file = new File("F:\\Excel\\customer-info.csv"); File file = new File(path); CsvReader csvReader = new CsvReader(); csvReader.setContainsHeader(true); // CsvContainer csv = csvReader.read(file, StandardCharsets.UTF_8); // 将解决中文乱码问题 CsvContainer csv = csvReader.read(file, Charset.forName("GBK")); // csv.getRowCount() 记录行数量 // csv.getHeader().size() 记录 记录列数量 // csv.getHeader().get(0) 编号 // csv.getHeader().get(1) 时间 for (CsvRow row : csv.getRows()) { System.out.println("======="); System.out.println("First column of line: " + row.getField("编号")); System.out.println("First column of line: " + row.getField("时间")); System.out.println("First column of line: " + row.getField("句子")); System.out.println("First column of line: " + row.getField("博客")); System.out.println("First column of line: " + row.getField("关键词")); System.out.println("First column of line: " + row.getField("话题")); }catch (Exception e){e.printStackTrace();} public static void csvReadData(String path) { // 初始化对象 Map<String, Object> map = new HashMap<String, Object>(); List<Map<String, Object>> list = new ArrayList<>(); try { File file = new File(path); CsvReader csvReader = new CsvReader(); csvReader.setContainsHeader(true); // CsvContainer csv = csvReader.read(file, StandardCharsets.UTF_8); // 将解决中文乱码问题 CsvContainer csv = csvReader.read(file, Charset.forName("GBK")); // csv.getRowCount() 记录行数量 // csv.getHeader().size() 记录 记录列数量 // csv.getHeader().get(0) 编号 // csv.getHeader().get(1) 时间 for (int i = 0; i < csv.getRowCount(); i++) { for (int j = 0; j < csv.getHeader().size(); j++) { map.put(csv.getHeader().get(j), csv.getRow(i).getField(csv.getHeader().get(j))); list.add(map); System.out.println(list); // 格式转换 String result = list.toString(); // 打印转换格式后的数据信息 System.out.println(result); }catch (Exception e) { e.printStackTrace(); // 获取csv 的行 public static void analysisData(String path){ List<String> list = new ArrayList<>(); try { File file = new File(path); CsvReader csvReader = new CsvReader(); csvReader.setContainsHeader(true); // CsvContainer csv = csvReader.read(file, StandardCharsets.UTF_8); // 将解决中文乱码问题 CsvContainer csv = csvReader.read(file, Charset.forName("GBK")); // csv.getRowCount() 记录行数量 // csv.getHeader().size() 记录 记录列数量 // csv.getHeader().get(0) 编号 // csv.getHeader().get(1) 时间 for (int j = 0; j < csv.getHeader().size(); j++) { list.add(csv.getHeader().get(j)); System.out.println(list); // 格式转换 String result = list.toString(); // 打印转换格式后的数据信息 System.out.println(result); }catch (Exception e) { e.printStackTrace();