当前位置: 代码网 > it编程>编程语言>Java > Java使用Apache Commons高效处理CSV文件的操作指南

Java使用Apache Commons高效处理CSV文件的操作指南

2025年03月07日 Java 我要评论
1、简述在 java 开发中,csv(comma-separated values,逗号分隔值)是一种常见的数据存储格式,广泛用于数据交换和简单的存储任务。apache commons csv 是 a

1、简述

在 java 开发中,csv(comma-separated values,逗号分隔值)是一种常见的数据存储格式,广泛用于数据交换和简单的存储任务。apache commons csv 是 apache 提供的一个轻量级库,专注于简化 csv 文件的解析和生成,支持多种 csv 格式,如 excel、rfc 4180、mysql 等。

本文将介绍 commons csv 的核心功能,并通过多个详细的使用示例展示其在 csv 文件解析和生成中的强大功能。

2、为什么选择 commons csv?

  • 轻量级:无需庞大的依赖,功能集中。
  • 支持多种格式:兼容 excel、rfc 4180、tab 分隔等格式。
  • 简单易用:api 设计清晰,易于上手。
  • 灵活性高:支持自定义分隔符、自定义换行符等多种配置。

在使用 commons csv之前,需要添加其依赖。以下是 commons csv 的 maven 依赖:

<dependency>
    <groupid>org.apache.commons</groupid>
    <artifactid>commons-csv</artifactid>
    <version>1.10.0</version>
</dependency>

3、使用样例

spring boot 集成 commons csv 常见的使用样例,以下举例供参考:

3.1 写入 csv 文件

commons csv 同样支持轻松生成 csv 文件:

package com.lm.csv.example;

import org.apache.commons.csv.csvformat;
import org.apache.commons.csv.csvprinter;

import java.io.filewriter;
import java.io.ioexception;

public class csvwriterexample {
    public static void main(string[] args) throws ioexception {
        // 创建 csv 文件
        try (filewriter writer = new filewriter("e:\\csv\\output.csv");
             csvprinter printer = new csvprinter(writer, csvformat.default
                     .withheader("id", "name", "age", "email"))) {

            printer.printrecord("1", "alice", "25", "alice@example.com");
            printer.printrecord("2", "bob", "30", "bob@example.com");
            printer.printrecord("3", "charlie", "35", "charlie@example.com");
        }
    }
}

3.2 使用自定义分隔符

如果需要自定义分隔符(例如分号 :),可以通过配置实现:

package com.lm.csv.example;

import org.apache.commons.csv.csvformat;
import org.apache.commons.csv.csvprinter;

import java.io.filewriter;

public class customdelimiterexample {
    public static void main(string[] args) throws exception {
        try (filewriter writer = new filewriter("e:\\csv\\custom_delimiter.csv");
             csvprinter printer = new csvprinter(writer, csvformat.default
                     .withheader("id", "name", "age", "email")
                     .withdelimiter(':'))) {

            printer.printrecord("1", "diana", "40", "diana@example.com");
            printer.printrecord("2", "eve", "22", "eve@example.com");
        }
    }
}

3.3 解析嵌套引号或特殊字符

csv 文件中可能包含嵌套引号或特殊字符(如换行符),commons csv 能轻松解析:

package com.lm.csv.example;

import org.apache.commons.csv.csvformat;
import org.apache.commons.csv.csvparser;

import java.io.stringreader;

public class specialcharacterexample {
    public static void main(string[] args) throws exception {
        string csvdata = "id,name,notes\n" +
                "1,\"john\",\"loves coding\nand teaching\"\n" +
                "2,\"jane\",\"enjoys reading\"";

        try (csvparser parser = csvformat.default
                .withfirstrecordasheader()
                .parse(new stringreader(csvdata))) {

            parser.foreach(record -> {
                string id = record.get("id");
                string name = record.get("name");
                string notes = record.get("notes");

                system.out.printf("id: %s, name: %s, notes: %s%n", id, name, notes);
            });
        }
    }
}

3.4 使用枚举映射字段

对于字段定义明确的 csv 文件,可以使用枚举来避免硬编码字段名称:

package com.lm.csv.example;

import org.apache.commons.csv.csvformat;
import org.apache.commons.csv.csvparser;
import org.apache.commons.csv.csvrecord;

import java.io.filereader;

public class enumfieldexample {
    enum header {
        id, name, age, email
    }

    public static void main(string[] args) throws exception {
        try (filereader reader = new filereader("e:\\csv\\output.csv");
             csvparser parser = csvformat.default
                     .withfirstrecordasheader()
                     .parse(reader)) {

            for (csvrecord record : parser) {
                string id = record.get(header.id);
                string name = record.get(header.name);
                string age = record.get(header.age);
                string email = record.get(header.email);

                system.out.printf("id: %s, name: %s, age: %s, email: %s%n", id, name, age, email);
            }
        }
    }
}

4、总结

apache commons csv 是处理 csv 文件的高效工具,无论是解析复杂的 csv 数据还是生成自定义格式的 csv 文件,都能提供简洁高效的解决方案。

优点:

  • 轻量级且易于使用。
  • 丰富的功能支持,如自定义分隔符、多格式支持。
  • 提供全面的 csv 文件读取和写入功能。

适用场景:

  • 数据导入和导出。
  • 数据转换和清洗。
  • 作为应用程序中的轻量级数据库。
  • 通过本文的示例,希望你能够快速掌握 commons csv 的使用方法,并灵活应用于实际项目中!

以上就是java使用apache commons高效处理csv文件的操作指南的详细内容,更多关于java apache commons处理csv的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com