打开与Apache POI .xlsx文件给出的NoClassDefFoundError InvalidFormatException [英] Opening .xlsx file with Apache POI gives NoClassDefFoundError InvalidFormatException

查看:953
本文介绍了打开与Apache POI .xlsx文件给出的NoClassDefFoundError InvalidFormatException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法让所有正常工作所需的.jar文件的导入。
我的最终目标是简单地在一个excel US preadsheet阅读(更具体的.xlsx文件)来检查的Apache POI的速度是否会为未来的应用程序。

我的问题是,为什么我会得到抛出的错误...


  

java.lang.NoClassDefFoundError的:组织/阿帕奇/ POI / openxml4j /异常/ InvalidFormatException


...当我可以在/组织/在类InvalidFormatException看到阿帕奇/ POI / openxml4j /异常/在文件POI-OOXML-3.9-20121203.jar?

我没有做过的,而Java编程,我希望为我自己的理智,我犯了一个愚蠢的错误。我的code似乎是正确编译但我上面的错误消息时,我尝试运行该程序。我做了一些研究,我的问题,但一直没能找到有人在我的处境。他们通常只是忘了/没有所需的.jar文件。也许我是在同一条船上,但希望你能告诉我。

我给我的逻辑的崩溃。这里是TestExcel.java的code

 进口java.io.FileInputStream中;
进口java.io.FileNotFoundException;
进口java.io.FileOutputStream中;
进口java.io.IOException异常;
进口的java.io.InputStream;进口org.apache.poi.ss.usermodel.Cell;
进口org.apache.poi.ss.usermodel.Row;
进口org.apache.poi.ss.usermodel.Sheet;
进口org.apache.poi.ss.usermodel.Workbook;
进口org.apache.poi.ss.usermodel.WorkbookFactory;进口org.apache.poi.openxml4j.exceptions.InvalidFormatException;公共类TestExcel
{
    公共静态无效的主要(字串[] args)
    {
        INP的InputStream;
        尝试
        {
            INP =新的FileInputStream(cost.xlsx);            工作簿WB;
            尝试{
                WB = WorkbookFactory.create(INP);
            }
            赶上(FileNotFoundException异常五){
                e.printStackTrace();
            }
        }
        赶上(InvalidFormatException E){
            e.printStackTrace();
        }
        赶上(IOException异常五){
            e.printStackTrace();
        }
    }
}

下面是'c_test'用来编译和运行Java code中的文件:

  javac的-classpath的/ home / robsco / Webdev的/ JAVA / POI / *TestExcel.java
java的TestExcel

下面是类路径的目录列表上面:

  robsco @ roblaptop:〜/ Webdev的/ JAVA / POI $ LS -al
共有26616
drwxrwxr-X 2 robsco robsco 4096 8月18日18时13。
drwxrwxr-X 6 robsco robsco 4096 8月18日18点12分..
-rwxr-xr-- 1 robsco robsco 52915 2009年9月18日的commons-logging-1.1.jar
-rwxr-xr-- 1 robsco robsco 313898 2009年4月5日的dom4j-1.6.1.jar
-rwxr-xr-- 1 robsco robsco 121070 2009年4月5日的junit-3.8.1.jar
-rwxr-xr-- 1 robsco robsco 358180 2009年4月5日的log4j-1.2.13.jar
-rwxrw-R-- 1 robsco robsco 14841622 08月18日13:15 OOXML-架构 - 1.1.jar
-rwxr-xr-- 1 robsco robsco 1869113 2012年11月26日POI-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 30446 2012年11月26日POI-excelant-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 936648 2012年11月26日POI-OOXML-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 4802621 2012年11月26日POI-OOXML-架构 - 3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 1226511 2012年11月26日POI暂存器,3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 2666695 2009年4月5日的xmlbeans-2.3.0.jar

和执行'c_test'的输出:

  robsco @ roblaptop:〜/ Webdev的/ JAVA $ ./c_test
异常线程mainjava.lang.NoClassDefFoundError的:组织/阿帕奇/ POI / openxml4j /异常/ InvalidFormatException
    在java.lang.Class.getDeclaredMethods0(本机方法)
    在java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
    在java.lang.Class.getMethod0(Class.java:2764)
    在java.lang.Class.getMethod(Class.java:1653)
    在sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    在sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
抛出java.lang.ClassNotFoundException:引起org.apache.poi.openxml4j.exceptions.InvalidFormatException
    在java.net.URLClassLoader的$ 1.run(URLClassLoader.java:366)
    在java.net.URLClassLoader的$ 1.run(URLClassLoader.java:355)
    在java.security.AccessController.doPrivileged(本机方法)
    在java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    在java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)
    在java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6个

我使用的:的结果
操作系统:Lubuntu 12.10 x86的结果。

  Java的版本
Java版本1.7.0_25
的Java(TM)SE运行时环境(建立1.7.0_25-B15)robsco @ roblaptop:〜/ Webdev的/ JAVA / POI $的javac -version
javac的1.7.0_25


解决方案

问题是你是如何启动程序。我看你现在有一个shell脚本:

  javac的-classpath的/ home / robsco / Webdev的/ JAVA / POI / *TestExcel.java
java的TestExcel

这编译所有的罐子,但不跟他们跑,这样你的程序将不会有它的依赖可用。 (不像一些C程序,与Java编译将不会内联depdendencies,也不会对当地的链接添加到文件。有工具,将做到这一点你,如果你真的需要它虽然)

如果你改变你的shell脚本是:

  javac的-classpath的/ home / robsco / Webdev的/ JAVA / POI / *TestExcel.java
java的-classpath:/家庭/ robsco / Webdev的/ JAVA / POI / *TestExcel

它应该工作的罚款。注意:为了增加在classpath当前目录为Java的找到你的类(在这种情况下,TestExcel)。

另外,你可以做的东西有点恶心与环境变量,使用 CLASSPATH ENVVAR了Java的检查,如:

 出口CLASSPATH =`:LS -1d --color =无/家庭/ robsco / Webdev的/ JAVA / POI / * | xargs的回声| SED的/ / \\:/ g'`
javac的TestExcel.java
java的TestExcel

I'm having trouble getting the import of all the required .jar files working correctly. My end goal is simply to read in an excel spreadsheet (more specifically .xlsx files) to check whether the speed of Apache POI will work for future applications.

My question is why am I getting thrown the error...

java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException

...when I can see in the class InvalidFormatException at /org/apache/poi/openxml4j/exceptions/ in the 'file poi-ooxml-3.9-20121203.jar'?

I haven't done programming in Java in a while and I'm hoping for my own sanity that I've made a stupid mistake. My code seems to be compiling correctly but I have the above error message when I try run the program. I have done some research into my issue but haven't been able to find someone in my situation. They usually just forget/don't have a required .jar file. Maybe I'm in the same boat but hopefully you'll be able to tell me.

I'll give a breakdown of my logic. Here is the code in 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(); 
        } 
    } 
}

Here is the file 'c_test' used to compile and run the java code:

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

Here is the directory listing of the classpath above:

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

and the output of executing 'c_test':

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

I am using:
OS: Lubuntu 12.10 x86

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

解决方案

The problem is with how you're launching your program. I see you currently have a shell script of:

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

That compiles with all the jars, but doesn't run with them, so your program won't have its dependencies available. (Unlike with some c programs, compiling with Java won't inline the depdendencies, nor will it add local links to the files. There are tools that will do that for you if you really need it though)

If you change your shell script to be:

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

It should work fine. Note the addition of the current directory in the classpath in order for 'java' to find your class (in this case TestExcel).

Alternately, you could do something a little icky with environment variables, using the CLASSPATH envvar that Java checks, eg

export CLASSPATH=.:`ls -1d --color=no /home/robsco/Webdev/java/poi/* | xargs echo | sed 's/ /\:/g'`
javac TestExcel.java
java TestExcel

这篇关于打开与Apache POI .xlsx文件给出的NoClassDefFoundError InvalidFormatException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆