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
相关产品推荐
相关产品推荐

