当前位置: 首页 > 工具软件 > openCSV > 使用案例 >

OpenCsv使用

孙凌龙
2023-12-01

说明

OpenCsv是一个非常简单的CSV解析库,帮助我们更好处理CSV格式文件。

<!-- 使用opencsv -->
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.5</version>
</dependency>

OpenCsv具体使用

样例csvtest.csv数据,格式编码为UTF-8

"name","sex","age"
"柳梦璃","女","16"
"云天河","男","17"
"韩菱纱","女","17"
"王小二","男","16,17"

OpenCsv读数据

根据CSVReader将文件内容读出来,注意最后一条“王小二”这条数据也能正常读出来,如果自己使用“,”分隔容易错列。

    /**
     * 读取一个csv文件
     */
    public static void readCsv() {
        String mypath = "D:\\WorkSpace\\IDEA_WorkSpace\\sortalgorithm-demos\\src\\main\\resources\\csvtest.csv";
        //以","作为解析的分隔符
        CSVParser csvParser = new CSVParserBuilder().withSeparator(',').build();
        //使用try(){}catch()这种语法资源会自动关闭不需要自己finally里关闭资源,推荐使用
        try (CSVReader readerCsv = new CSVReaderBuilder(Files.newBufferedReader(Paths.get(mypath), StandardCharsets.UTF_8)).withCSVParser(csvParser).withSkipLines(1).build()) {
            String lines[];
            while ((lines = readerCsv.readNext()) != null) {
                Arrays.asList(lines).forEach(System.out::println);
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果:

柳梦璃
女
16
云天河
男
17
韩菱纱
女
17
王小二
男
16,17

OpenCsv写数据

将内容输出到文件,默认CSV格式文件是以“,”隔开的。

    /**
     * 写数据
     */
    public static void writeCsv() {
        String myPath = "D:\\WorkSpace\\IDEA_WorkSpace\\sortalgorithm-demos\\src\\main\\resources\\csvouttest.csv";
        String[] data1 = {"姓名", "性别", "年龄"};
        String[] data2 = {"云天明", "男", "17"};
        String[] data3 = {"韩菱纱", "女", "16"};

        //将数据放到列表里面
        List<String[]> datas = new ArrayList();
        datas.add(data1);
        datas.add(data2);
        datas.add(data3);

        //将内容输入到文件
        try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(Paths.get(myPath), StandardCharsets.UTF_8),
                CSVWriter.DEFAULT_SEPARATOR,
                CSVWriter.NO_QUOTE_CHARACTER,
                CSVWriter.NO_ESCAPE_CHARACTER,
                CSVWriter.DEFAULT_LINE_END)) {
            //写数据到文件
            writer.writeAll(datas);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

得到文件内容:

姓名,性别,年龄
云天明,男,17
韩菱纱,女,16
 类似资料: