java 读取 csv文件 | 您所在的位置:网站首页 › java读取csv文件表头获取的字符串不带双引号 › java 读取 csv文件 |
java 读取 csv 文件详解
一、opencsv
com.opencsv
opencsv
5.4
1. 读取 csv 文件,手动解析
读取 csv 文件的每一行数据,每行存入一个 string [] /** * 读取csv文件 * * @param file csv文件 * @return 数组 */ public static List getCsvDataMethod(MultipartFile file) { List list = new ArrayList(); int i = 0; try { CSVReader csvReader = new CSVReaderBuilder( new BufferedReader( new InputStreamReader(file.getInputStream(), "utf-8"))).build(); Iterator iterator = csvReader.iterator(); while (iterator.hasNext()) { String[] next = iterator.next(); //去除第一行的表头,从第二行开始 if (i >= 1) { list.add(next); } i++; } return list; } catch (Exception e) { System.out.println("CSV文件读取异常"); return list; } } 2. 通过注解映射为 beanjavabean 属性上使用注解 @CsvBindByName 修饰 import com.opencsv.bean.CsvBindByName; import lombok.Data; @Data public class MyBean{ @CsvBindByName(column = "name") private String name; @CsvBindByName(column = "title") private String title; }解析 csv 文件 /** * 解析csv文件并转成bean(方法三) * * @param file csv文件 * @param clazz 类 * @param 泛型 * @return 泛型bean集合 */ public static List getCsvDataMethod3(MultipartFile file, Class clazz) { InputStreamReader in = null; CsvToBean csvToBean = null; try { in = new InputStreamReader(file.getInputStream(), "utf-8"); HeaderColumnNameMappingStrategy strategy = new HeaderColumnNameMappingStrategy(); strategy.setType(clazz); csvToBean = new CsvToBeanBuilder(in).withMappingStrategy(strategy).build(); } catch (Exception e) { logger.error("数据转化失败"); return null; } return csvToBean.parse(); } 二、 javacsv net.sourceforge.javacsv javacsv 2.0读取 csv 文件 import com.csvreader.CsvReader; import java.nio.charset.Charset; CsvReader csvReader = new CsvReader("CSV文件路径", ',', Charset.forName("utf-8")); // 获取出当前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(); 三、 easycsv sdk easycsv 4.0.0 system ${project.basedir}/lib/EasyCSV-1.0-SNAPSHOT.jar通过 @CsvProperty 注解,将 bean 的属性和 csv 的字段进行映射 // 核心代码 List dataList = new EasyCsv().readAll(filePath, OriginalCsvData.class); 在实际开发过程中,发现如果字段内容中也包含 ",",则不能正确的映射字段值。暂无其他解决思路。目前通过手动解析来解决这个问题。 四、 fastcsv de.siegmar fastcsv 1.0.3读取 csv 文件 public static void csvReadOperation() throws IOException { File file = new File("F:\\Excel\\customer-info.csv"); CsvReader csvReader = new CsvReader(); csvReader.setContainsHeader(true); CsvContainer csv = csvReader.read(file, StandardCharsets.UTF_8); for (CsvRow row : csv.getRows()) { System.out.println("First column of line: " + row.getField("用户编号")); } } public static void csvReadOperation1() throws IOException { File file = new File("F:\\Excel\\customer-info.csv"); CsvReader csvReader = new CsvReader(); CsvContainer csv = csvReader.read(file, StandardCharsets.UTF_8); for (CsvRow row : csv.getRows()) { if (row.getOriginalLineNumber() != 1) { ResultInfo resultInfo = new ResultInfo(); resultInfo.setUserId(row.getField(0)); resultInfo.setUserPhone(row.getField(1)); listResultInfo.add(resultInfo); } } } public static void csvReadOperation2() throws IOException { File file = new File("F:\\Excel\\customer-info.csv"); CsvReader csvReader = new CsvReader(); try (CsvParser csvParser = csvReader.parse(file, StandardCharsets.UTF_8)) { CsvRow row; while ((row = csvParser.nextRow()) != null) { System.out.println("Read line: " + row); System.out.println("First column of line: " + row.getField(0)); } } } |
CopyRight 2018-2019 实验室设备网 版权所有 |