【详解】递归读取子目录中的csv文件并解析到实体对象

举报
足球哥 发表于 2025/01/03 19:01:52 2025/01/03
【摘要】 读取一个目录下所有的 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。