当前位置: 首页 > 知识库问答 >
问题:

使用Apache POI打开.xlsx文件时会出现NoClassDefoundError InvalidFormatException

逑禄
2023-03-14

我的问题是为什么我会被抛出错误...

java.lang.NoClassDefoundError:org/apache/poi/openxml4j/exceptions/invalidformatexception

...当我在/org/apache/poi/openxml4j/exceptions/的“文件poi-ooxml-3.9-20121203.jar”中看到InvalidFormatException类时?

我已经有一段时间没有用Java编程了,我希望我自己理智地认为我犯了一个愚蠢的错误。我的代码似乎编译正确,但当我尝试运行该程序时,出现了上面的错误消息。我已经对我的问题做了一些研究,但还没有找到与我情况相同的人。他们通常只是忘记/没有必需的.jar文件。也许我也在这条船上,但希望你能告诉我。

我将给出我的逻辑的崩溃。下面是TestExcel.java中的代码

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.usermodel.WorkbookFactory; 

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

public class TestExcel 
{
    public static void main(String[] args) 
    { 
        InputStream inp; 
        try 
        { 
            inp = new FileInputStream("cost.xlsx"); 

            Workbook wb; 
            try { 
                wb = WorkbookFactory.create(inp); 
            } 
            catch (FileNotFoundException e) { 
                e.printStackTrace(); 
            } 
        } 
        catch (InvalidFormatException e) { 
            e.printStackTrace(); 
        } 
        catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
}

下面是用于编译和运行java代码的文件'c_test':

javac -classpath "/home/robsco/Webdev/java/poi/*" TestExcel.java
java TestExcel
robsco@roblaptop:~/Webdev/java/poi$ ls -al
total 26616
drwxrwxr-x 2 robsco robsco     4096 Aug 18 18:13 .
drwxrwxr-x 6 robsco robsco     4096 Aug 18 18:12 ..
-rwxr-xr-- 1 robsco robsco    52915 Sep 18  2009 commons-logging-1.1.jar
-rwxr-xr-- 1 robsco robsco   313898 Apr  5  2009 dom4j-1.6.1.jar
-rwxr-xr-- 1 robsco robsco   121070 Apr  5  2009 junit-3.8.1.jar
-rwxr-xr-- 1 robsco robsco   358180 Apr  5  2009 log4j-1.2.13.jar
-rwxrw-r-- 1 robsco robsco 14841622 Aug 18 13:15 ooxml-schemas-1.1.jar
-rwxr-xr-- 1 robsco robsco  1869113 Nov 26  2012 poi-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco    30446 Nov 26  2012 poi-excelant-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco   936648 Nov 26  2012 poi-ooxml-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco  4802621 Nov 26  2012 poi-ooxml-schemas-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco  1226511 Nov 26  2012 poi-scratchpad-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco  2666695 Apr  5  2009 xmlbeans-2.3.0.jar
robsco@roblaptop:~/Webdev/java$ ./c_test 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
    at java.lang.Class.getMethod0(Class.java:2764)
    at java.lang.Class.getMethod(Class.java:1653)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions.InvalidFormatException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

我正在使用:
操作系统:Lubuntu 12.10x86

java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)

robsco@roblaptop:~/Webdev/java/poi$ javac -version
javac 1.7.0_25

共有1个答案

田英卓
2023-03-14

问题是你如何启动你的程序。我看到您当前有一个shell脚本:

javac -classpath "/home/robsco/Webdev/java/poi/*" TestExcel.java
java TestExcel

它可以与所有JAR一起编译,但不能与它们一起运行,因此您的程序将没有它的依赖项可用。(与一些c程序不同,用Java编译不会内联depdendencies,也不会添加到文件的本地链接。不过,如果你真的需要,有一些工具可以帮你做到这一点。)

如果将shell脚本更改为:

javac -classpath "/home/robsco/Webdev/java/poi/*" TestExcel.java
java -classpath ".:/home/robsco/Webdev/java/poi/*" TestExcel
export CLASSPATH=.:`ls -1d --color=no /home/robsco/Webdev/java/poi/* | xargs echo | sed 's/ /\:/g'`
javac TestExcel.java
java TestExcel
 类似资料:
  • 我一直在开发一个android应用程序,在这个应用程序中,我必须打开.xls和.xlsx文件以便进一步实现。在.xls的情况下,一切工作正常,但当我尝试打开.xls x文件时,它给了我异常。下面是我的代码,请帮助我解决这些异常 我正在使用的JAR: null

  • 用户可以将Excel文档保存为. xls或xml-table。结果是一个具有固定结构的xml-file,Excel可以用它纠正工作。 可以用java中的ApachePOI打开这种类型的excel文件吗? 事先谢谢你,安德烈。

  • 在mac osx环境中使用Apache POI 3.8读取文件时,由于无法加载xlsx文件,因此在Windows中使用Open XML SDK 2.0 for Microsoft Office创建了一个文件。下面是堆栈跟踪。我可以打开文件并查看它。 同样的代码适用于我在mac os环境中创建的文件。如果我在处理之前打开并保存文件,我不会有任何问题。注意:保存后文件大小增加。是在.NET中生成文件并

  • 问题内容: 我编写的python程序存在一个小问题,该程序可以从特殊文本文件中提取一些信息。循环(下面的代码)需要执行我的函数,超过500个文件(一个文件列出一个列表),这样我才能构建数据集。 错误:发生的是IOException ,因此由于某种原因python无法访问文件。我已经检查了目录路径名(位置)和文件许可权,它们是正确的(读+写)。有什么想法为什么当文件确实存在且路径名正确时会报告IOE

  • 使用Eclipse2018_09和Vaadin8的im。我只是直接创建了一个干净的Vaadin项目“MyApplication”。当我创建一个Vaadin设计器文件“testdesigne.html”并尝试打开它时,设计器崩溃,文件将被关闭。它首先尝试加载视图,并在5秒后崩溃。 当我打开Eclipse错误日志视图时,我可以看到以下2个问题: 从插件调用代码时出现问题:“org.eclipse.ui

  • Delphi代码: 请帮助我解决这个问题。