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方法类似。
GitHub repository.