{"id":18600611,"url":"https://github.com/houbb/csv","last_synced_at":"2025-04-10T18:31:27.323Z","repository":{"id":57720084,"uuid":"189696980","full_name":"houbb/csv","owner":"houbb","description":"The csv read/write tool based on java annotation.(基于 java 注解的 CSV 文件读写框架工具。)","archived":false,"fork":false,"pushed_at":"2023-11-28T10:39:50.000Z","size":173,"stargazers_count":25,"open_issues_count":3,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T02:51:28.460Z","etag":null,"topics":["csv","csv-export","csv-import","csv-java","csv-reader","java-annotations","jdk7"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/houbb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGE_LOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-01T06:06:34.000Z","updated_at":"2024-12-27T12:35:14.000Z","dependencies_parsed_at":"2022-09-26T22:30:38.194Z","dependency_job_id":null,"html_url":"https://github.com/houbb/csv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fcsv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fcsv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fcsv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/houbb%2Fcsv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/houbb","download_url":"https://codeload.github.com/houbb/csv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248271722,"owners_count":21075800,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","csv-export","csv-import","csv-java","csv-reader","java-annotations","jdk7"],"created_at":"2024-11-07T02:04:44.140Z","updated_at":"2025-04-10T18:31:26.365Z","avatar_url":"https://github.com/houbb.png","language":"Java","readme":"# csv\n\n[CSV](https://github.com/houbb/csv) 是基于 java 注解的 csv 读写框架，让你更加优雅方便的操作 csv。\n\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.houbb/csv/badge.svg)](http://mvnrepository.com/artifact/com.github.houbb/csv)\n[![Build Status](https://www.travis-ci.org/houbb/csv.svg?branch=master)](https://www.travis-ci.org/houbb/csv?branch=master)\n[![](https://img.shields.io/badge/license-Apache2-FF0080.svg)](https://github.com/houbb/csv/blob/master/LICENSE.txt)\n[![Open Source Love](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/houbb/csv)\n\n## 相关框架\n\n[Apache commons-csv](https://github.com/apache/commons-csv)\n\n[super-csv](https://github.com/super-csv/super-csv)\n\n简单看了下，这两个框架提供的特性都非常的基础。\n\n## 创作原由\n\n以前觉得 csv 文件的读写非常简单，就懒得封装。\n\n最近一个月写了两次 csv 文件相关的东西，发现要处理的细节还是有的，还浪费比较多的时间。\n\n比如：\n\n1. UTF-8 中文编码使用 excel 打开乱码，因为缺少 BOM 头。\n\n2. 不同类型字段转化为字符串，顺序的指定，head 头的指定，如果手写都会很繁琐。\n\n3. 读取的时候最后 `,` 后无元素，split 会缺失等。\n\n为了解决上述问题，此框架应运而生。\n\n## 特性\n\n- Fluent 流式写法\n\n- 基于 java 注解，支持自定义的转换和灵活配置\n\n- 内置 8 大基本类型以及 String 类型转换\n\n- 解决 Excel 直接打开，utf-8 乱码问题\n\n- 支持集合、数组、Map 的存取\n\n- 支持对象中内嵌其他对象\n\n- 支持特殊字符转义\n\n### v0.1.0 变更\n\n- 枚举值映射\n\n支持快速简单的枚举值映射\n\n# 快速开始\n\n## 环境\n\njdk7+\n\nmaven 3.x\n\n## maven 引入\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.houbb\u003c/groupId\u003e\n    \u003cartifactId\u003ecsv\u003c/artifactId\u003e\n    \u003cversion\u003e0.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## 朴素的读写\n\n直接转换为 string list.\n\n```java\nfinal String path = \"stringlist.csv\";\nfinal String target = \"stringlist2.csv\";\n\nList\u003cList\u003cString\u003e\u003e dataList = CsvStringListHelper.read(path);\nSystem.out.println(dataList);\n\nCsvStringListHelper.write(target, dataList);\n```\n\n- stringlist.csv\n\n```csv\nid,name,age\n1,\"user,1\",10\n2,\"user,1\",201\n```\n\n- dataList 字符串列表\n\n```\n[[id, name, age], [1, user,1, 10], [2, user,1, 201]]\n```\n\n## 示例代码\n\n### 写入\n\n详情参考 [CsvHelperWriterTest.java](https://github.com/houbb/csv/blob/release_0.0.8/src/test/java/com/github/houbb/csv/util/CsvHelperWriterTest.java)\n\n```java\nfinal String path = \"src\\\\test\\\\resources\\\\helper.csv\";\n\nCsvHelper.write(buildCommonList(), CsvWriters.filePath(path));\n```\n\n- 文件生成\n\n```csv\nname,age,score,money,sex,level,id,status,coin\n你好,10,60.0,200.0,true,4,1,Y,1\n```\n\n### 读取\n\n详情参考 [CsvHelperReaderTest.java](https://github.com/houbb/csv/blob/release_0.0.8/src/test/java/com/github/houbb/csv/util/CsvHelperReaderTest.java)\n\n- 读取文件\n\n```java\nfinal String path = \"src\\\\test\\\\resources\\\\common.csv\";\n\nList\u003cUser\u003e userList = CsvHelper.read(path, User.class);\nAssert.assertEquals(\"[User{name='你好', age=10, score=60.0, money=200.0, sex=true, level=4, id=1, status=Y, coin=1}]\", userList.toString());\n```\n\n- 读取字符串列表\n\n也支持直接读取字符串列表。\n\n```java\nList\u003cString\u003e lines = Arrays.asList(\"name,age,score,money,sex,level,id,status,coin\",\n                \"你好,10,60.0,200.0,true,4,1,Y,1\");\n\nList\u003cUser\u003e userList = CsvHelper.read(lines, User.class);\nAssert.assertEquals(\"[User{name='你好', age=10, score=60.0, money=200.0, sex=true, level=4, id=1, status=Y, coin=1}]\", userList.toString());\n```\n\n### 对象信息\n\n其中使用的属性如下：\n\n- User.java\n\n演示基本类型的转换\n\n```java\npublic class User {\n\n    private String name;\n\n    private int age;\n\n    private float score;\n\n    private double money;\n\n    private boolean sex;\n\n    private short level;\n\n    private long id;\n\n    private char status;\n\n    private byte coin;\n\n    //Getter \u0026 Setter \u0026 toString()\n}\n```\n\n- 对象列表构建\n\n```java\n    /**\n     * 构建通用测试列表\n     * @return 列表\n     */\n    private List\u003cUser\u003e buildCommonList() {\n        User user = new User();\n        short s = 4;\n        byte b = 1;\n        user.age(10)\n        .name(\"你好\")\n        .id(1L)\n        .score(60)\n        .coin(b)\n        .level(s)\n        .money(200)\n        .sex(true)\n        .status('Y');\n        return Arrays.asList(user);\n    }\n```\n\n# 拓展阅读\n\n[01-CSV 引导类方法说明](doc/user/01-csv-引导类.md)\n\n[02-CSV 字段注解的使用](doc/user/02-csv-注解使用.md)\n\n[03-CSV 集合相关支持](doc/user/03-csv-支持集合类.md)\n\n[04-CSV 内嵌对象使用](doc/user/04-csv-支持内嵌对象.md)\n\n[05-CSV 内嵌对象使用](doc/user/05-csv-特殊字符转义.md)\n\n# 后期 road-map\n\n- 引入 `@Order` 注解或者新增 `order()` 注解属性\n\n避免 java 反射存在的字段顺序和声明顺序不一致问题\n\n- 使用 converter 项目统一优化\n\n读写转换等操作统一复用。","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoubb%2Fcsv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoubb%2Fcsv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoubb%2Fcsv/lists"}