You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中用OpenCSV读CSV文件遇NoClassDefFoundError与ClassNotFoundException

问题描述

我正在开发一个自动发送邮件的应用,流程为先读取CSV文件,创建Recipient类实例并存入ArrayList。但运行时出现大量错误,包括NoClassDefFoundError和ClassNotFoundException。

代码实现

import java.util.ArrayList;
import java.util.List;
import java.io.FileReader;
import java.io.IOException;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;


public class UserDataLoader {

    private final String url;
    private ArrayList<RECIPIENT> mailingList = new ArrayList<>();

    public UserDataLoader (String url){
        this.url = url;
    }

    public void loadData(){
        try (CSVReader reader = new CSVReader(new FileReader(url))) {
            List<String[]> records = reader.readAll();

            for (int i = 1; i <= records.size(); i++){
                String[] record = records.get(i);
                String name = record[0];
                String emailAddress = record[1];
                String dateOfBirth = record[2];

                RECIPIENT customer = new RECIPIENT(name, emailAddress, dateOfBirth);
                mailingList.add(customer);
    
            }
        
        } catch (IOException | CsvException e) {
            e.printStackTrace();
        }
    }

    public ArrayList<RECIPIENT> getMailinList(){
        return mailingList;
    }


}

错误日志

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/ObjectUtils
at com.opencsv.CSVParser.(CSVParser.java:110)
at com.opencsv.CSVReader.(CSVReader.java:99)
at UserDataLoader.loadData(UserDataLoader.java:19)
at App.main(App.java:5)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.ObjectUtils
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 4 more

我预期不会出现错误,不清楚问题来源。已下载OpenCSV并添加到VSCode的引用库中,所有Java文件和CSV文件都在同一文件夹内。


解决方案

1. 解决依赖缺失问题

错误核心是OpenCSV依赖的Apache Commons Lang3库未被引入,导致运行时找不到org.apache.commons.lang3.ObjectUtils类:

  • 下载Apache Commons Lang3的jar包,添加到VSCode的项目引用库中,确保运行环境能加载到该类。
  • 若使用Maven/Gradle管理项目,直接添加对应依赖配置,可自动处理依赖链,避免手动下载遗漏。

2. 修复代码中的潜在问题

  • 数组索引越界:循环条件i <= records.size()会触发IndexOutOfBoundsException,List索引从0开始,最后一个元素索引为records.size()-1,应修改为i < records.size()。
  • 类名一致性:代码中使用RECIPIENT,但Java类名规范为大驼峰(Recipient),需确认实际类名与代码调用一致,避免类找不到的问题。
  • 方法名拼写错误:getMailinList()应为getMailingList(),拼写错误会导致调用时出现异常。

内容的提问来源于stack exchange,提问作者dawsUTV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:47:03