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

Eclipse中Java读取Excel报NoClassDefFoundError问题求助

Excel读取Java程序报错解决求助

环境与依赖信息

  • 运行环境:Eclipse、JDK-19
  • 已手动引入的依赖库:
    • commons-collection4-4.4.jar
    • commons-collections4-4.4-javadoc.jar
    • commons-collections4-4.4-sources.jar
    • commons-compress-1.22.jar
    • poi-5.2.3.jar
    • poi-ooxml-5.2.3.jar
    • poi-ooxml-full-5.2.3.jar
    • xmlbeans-5.1.1.jar
  • 尝试过的版本:曾切换到POI 5.2.2版本(看到资料说5.2.3部分功能和Excel兼容有问题)

程序代码

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.print.DocFlavor.READER;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class MainExcel {

    public static void main(String[] args) {
        // 存储Excel数据的变量
        ArrayList<Integer> serial = new ArrayList<>();
        ArrayList<String> name = new ArrayList<>();
        ArrayList<String> result = new ArrayList<>();
        ArrayList<String> headers = new ArrayList<>();

        // 弹出窗口选择Excel文件
        JFileChooser openFilechooser = new JFileChooser();
        openFilechooser.setDialogTitle("Open File");
        openFilechooser.removeChoosableFileFilter(openFilechooser.getFileFilter());
        FileFilter filter = new FileNameExtensionFilter("Excel File (.xlsx)", "xlsx");
        openFilechooser.setFileFilter(filter);

        if (openFilechooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

            File inputFile = openFilechooser.getSelectedFile();
            try (FileInputStream in = new FileInputStream(inputFile)) {

                /* 我怀疑问题出在这里,但不知道怎么修复 */
                XSSFWorkbook importedfile = new XSSFWorkbook(in);
                XSSFSheet sheet1 = importedfile.getSheetAt(0);

                Iterator<Row> rowIterator = sheet1.iterator();
                while (rowIterator.hasNext()) {

                    Row row = rowIterator.next();
                    Iterator<Cell> cellIterator = row.cellIterator();
                    while (cellIterator.hasNext()) {

                        Cell cell = cellIterator.next();
                        if (row.getRowNum() == 0) {

                            headers.add(cell.getStringCellValue());
                        } else {

                            if (cell.getColumnIndex() == 0) {

                                serial.add((int) cell.getNumericCellValue());
                            } else if (cell.getColumnIndex() == 1) {

                                name.add(cell.getStringCellValue());
                            } else if (cell.getColumnIndex() == 2) {

                                result.add(cell.getStringCellValue());
                            }
                        }
                    }
                    importedfile.close();
                    in.close();
                    System.out.println("Excel File is read succesffully!");
                    System.out.println("\n\n");
                    System.out.println("List of serial no. is: " + serial);
                    System.out.println();
                    System.out.println("List fo students name is: " + name);
                    System.out.println();
                    System.out.println("List of students results is: " + result);
                    System.out.println();
                }
            } catch (IOException ex) {
                Logger.getLogger(READER.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

控制台报错信息

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream
    at MainExcel.main(MainExcel.java:52)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream
    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:521)
    ... 1 more

补充说明

  • 这个程序仅用于测试Excel读取功能,我怀疑问题出在XSSFWorkbook importedfile = new XSSFWorkbook(in);这一行,试过多种异常捕获方式都无效
  • 之前把日志代码从Logger.getLogger(ReadExcel.class.getName())改成Logger.getLogger(READER.class.getName())后程序才能运行,但还是出现上述报错,求解决方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:40