【详解】递归读取子目录中的csv文件并解析到实体对象
【摘要】 读取一个目录下所有的 CSV 文件并进行处理,可以使用 Java 的 Files API 或者 File 类来列出目录中的所有文件。然后,你可以根据文件的扩展名筛选出 .csv 文件,并对每个文件进行读取到对象,这样很方便获取数据需要注意的是文件编码格式,如果非utf8需要读取流时进行转码需要引用 <dependency> <groupId>com.op...
读取一个目录下所有的 CSV 文件并进行处理,可以使用 Java 的 Files API 或者 File 类来列出目录中的所有文件。然后,你可以根据文件的扩展名筛选出 .csv 文件,并对每个文件进行读取到对象,这样很方便获取数据
需要注意的是文件编码格式,如果非utf8需要读取流时进行转码
需要引用
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.6</version>
</dependency>
详细代码
private void parseFile(ReconciliationProcessBatchInfo item,String filedir){
try {
Files.walk(Paths.get(filedir))
.filter(path -> path.toString().endsWith(".csv")) // 只筛选 .csv 文件
.forEach(path -> {
log.info("解析数据Processing file: " + path.getFileName());
processCsvFile(path.toString(),item);
});
} catch (Exception e) {
e.printStackTrace();
}
}
private void processCsvFile(String filePath,ReconciliationProcessBatchInfo item) {
try {
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inputStream, "GBK") ;
CsvToBean<ParsonPADzFileDto> csvToBean = new CsvToBeanBuilder<ParsonPADzFileDto>(reader)
.withType(ParsonPADzFileDto.class)
.withIgnoreLeadingWhiteSpace(true)
.build();
// 将 CSV 文件转换为 Person 对象的列表
List<ParsonPADzFileDto> personList = csvToBean.parse();
// 打印每个解析的对象
for (ParsonPADzFileDto dto : personList) {
log.info("解析数据{}",dto);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Data
public class ParsonPADzFileDto {
@CsvBindByName(column = "银行订单号")
private String bankOrderNo;
@CsvBindByName(column = "订单类型")
private String payType;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)