

使用 Univocity Parsers Java 库实现快速灵活的 CSV 解析
source link: https://www.jdon.com/63196
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用 Univocity Parsers Java 库实现快速灵活的 CSV 解析
Univocity Parsers是一个用 Java 编写的文件解析器库。它的性能令人难以置信,并为数据处理提供了方便的界面。据统计,它是最快的 CSV 解析器。
该库功能强大,并提供更多选项,例如 CSV 写入、自定义解析器设置等。要了解有关所有支持功能的更多信息。
点击标题见演示源码项目:
假设您在 CSV 文件中存储了多个服务配置属性。作为管理员用户,您希望通过 REST 端点检索服务数据。
data.csv:
SERVICE_ID,SERVICE_NAME,SERVICE_CASE,SERVICE_CLIENT 1,SERVICE1,TEST1,CLIENT1 2,SERVICE2,TEST2,CLIENT2 12,SERVICE12,TEST12,CLIENT21 |
这个文件就像一个数据库,我们将查询它的信息。
请注意,该库还可以解析不同格式的文件,例如 TSV。
DTO:
package com.univocity.demo.dto; import com.univocity.parsers.annotations.Parsed; import lombok.Data; @Data public class CsvData { @Parsed(field = "SERVICE_ID") private String id; @Parsed(field = "SERVICE_NAME") private String serviceName; @Parsed(field = "SERVICE_CASE") private String serviceCase; @Parsed(field = "SERVICE_CLIENT") private String serviceClient; } |
- @Data :Lombok注解消除了模板代码(Getters, Setters, 等)。
- UniVocity的@Parsed注解与Java Persistence的@Column注解相似。它与我们CSV文件中的列名相对应。
服务代码:
@Service public class CsvDataService { private final HashMap<String, CsvData> dataMap = new HashMap<>(); @PostConstruct private void populateDataMap() { BeanListProcessor<CsvData> rowProcessor = parseDataFromFile(); for (CsvData data : rowProcessor.getBeans()) { dataMap.put(data.getId(), data); } } private BeanListProcessor<CsvData> parseDataFromFile() { InputStream is = getClass().getClassLoader().getResourceAsStream("data.csv"); CsvParserSettings settings = new CsvParserSettings(); BeanListProcessor<CsvData> rowProcessor = new BeanListProcessor<>(CsvData.class); settings.setHeaderExtractionEnabled(true); settings.setProcessor(rowProcessor); settings.selectFields("SERVICE_ID", "SERVICE_NAME", "SERVICE_CASE"); CsvParser parser = new CsvParser(settings); parser.parseAllRecords(is); return rowProcessor; } public CsvData getDataById(String id) { return dataMap.get(id); } public List<CsvData> getAllData() { return new ArrayList<>(dataMap.values()); } } |
这类似于使用Spring JPA从数据库中查询数据。但我们不希望每次收到请求时都要读取CSV文件。这个服务将像一个缓存。
- 我们用CSV文件中的数据填充dataMap。这就是我们的缓存。
- @PostConstruct注解保证了Bean将被完全初始化,并且我们可以使用必要的依赖关系。
- parseDataFromFile方法从资源文件夹中读取文件。
- 我们为CsvParser定义了一个CsvParserSettings配置类。
- 我们添加了一个BeanListProcessor,它将所有从解析的输入中生成的Java对象存储到一个列表中。这样,我们就可以使用Getters轻松地访问数据。
- 注意我们还指示CsvParserSettings使用selectFields方法来选择特定的字段。这意味着我们将不会加载我们不需要的字段。这也加快了进程。
- getDataById和getAllData方法与JPA Repository方法类似。
Recommend
-
34
-
55
Build recursive descent parsers . Contribute to shivamMg/rd development by creating an account on GitHub.
-
46
·Security In my never-ending quest to improve the quality of my C codebases, I've been using AFL to fuzz statzone , the zone parser I use to generate monthly statistics...
-
23
Some years ago someone asked whether it would make sense to switch Python to a PEG parser. (Or a PEG grammar; I don’t recall exactly what was said by whom, or when.) I looked into it a bit and wasn’t sure what to think, so...
-
44
Bad JSON parsers Exposing problems in json parsers of several programming languages. Introduction Many JSON parsers (and many parsers in general) use
-
80
README.md Welcome to univocity-trader univocity-trader is an open-source trading framework built to enable anyone with basic programming skil...
-
26
Abstract Syntax errors are generally easy to fix for humans, but not for parsers in general nor LR parsers in particular. Traditional ‘panic mode’ error recovery, though easy to implement and applicabl...
-
15
[Submitted on 18 Apr 2019] Genie: A Generator of Natural Language Semantic Parsers for Virtual Assistant Commands Download PDF
-
10
首页技术宅Clash for Windows 使用Parsers功能,实现多线程下载Clash for Windows 使用Parsers功能,实现多线程下载...
-
8
利用Nacos实现Seata事务模式(XA与AT)的快速配置与灵活切换 作者:一安 2024-01-30 08:10:37 XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范描述了全...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK