Java 在linux机器上,使用ApachePOI读取.xlsx文件会产生org.apache.poi.POIXMLException

Java 在linux机器上,使用ApachePOI读取.xlsx文件会产生org.apache.poi.POIXMLException,java,ubuntu,apache-poi,xlsx,Java,Ubuntu,Apache Poi,Xlsx,我有一个应用程序,它读取.xlsx文件并向用户显示内容。该应用程序在windows环境下运行良好 我在ubuntu服务器上的tomcat6上部署了这个web应用的.war文件。我还复制了服务器上的.xlsx文件 代码中文件的路径是正确的 但是这条线 FileInputStream file = new FileInputStream(new File(FileName)); XSSFWorkbook workbook = new XSSFWorkbook(file); 给出一个错误 java.

我有一个应用程序,它读取.xlsx文件并向用户显示内容。该应用程序在windows环境下运行良好

我在ubuntu服务器上的tomcat6上部署了这个web应用的.war文件。我还复制了服务器上的.xlsx文件

代码中文件的路径是正确的

但是这条线

FileInputStream file = new FileInputStream(new File(FileName));
XSSFWorkbook workbook = new XSSFWorkbook(file);
给出一个错误

java.lang.reflect.InvocationTargetException
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403)
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207)
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107)
java.lang.reflect.InvocationTargetException
org.apache.poi.POIXMLException:java.lang.reflect.InvocationTargetException
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)
org.apache.poi.poimmldocumentpart.read(poimmldocumentpart.java:403)
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155)
org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:207)
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107)
我已检查变量FileName是否包含服务器上文件的正确路径和文件名(/usr/local/Metrics/MetricFiles/FY2013\u Q2\u GIT\u Review\u Metrics\u by\u LSS-GC.xlsx)

因为ubunut服务器是一个VM,所以我使用WinSCP复制了.xlsx文件。文件的大小也是正确的

为什么这个错误发生在linux平台上

添加额外的异常跟踪

Caused by: java.lang.reflect.InvocationTargetException at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at 
java.lang.reflect.Constructor.newInstance(Constructor.java:525) at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) ... 68 more 
Caused by: java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:2694) at java.lang.String.<init>(String.java:203) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseCdataLiteral(PiccoloLexer.java:3027) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseQuotedTagValue(PiccoloLexer.java:2936) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1754) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714) at 
org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439) at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270) at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257) at 
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) at 
org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument$Factory.parse(Unknown Source) at 
org.apache.poi.xssf.model.StylesTable.readFrom(StylesTable.java:121) at 
org.apache.poi.xssf.model.StylesTable.<init>(StylesTable.java:92) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at 
java.lang.reflect.Constructor.newInstance(Constructor.java:525) at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) at 
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403) at 
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207) at 
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at 
java.lang.reflect.Method.invoke(Method.java:601) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
原因:java.lang.reflect.InvocationTargetException位于
sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)位于
位于的sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
位于的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
newInstance(Constructor.java:525)位于
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60)。。。68多
原因:java.lang.OutOfMemoryError:java.util.Arrays.copyOfRange(Arrays.java:2694)处的java堆空间位于java.lang.String。(String.java:203)处
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseCdataLiteral(PiccoloLexer.java:3027)位于
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseQuotedTagValue(PiccoloLexer.java:2936)位于
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1754)位于
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)位于
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362)位于
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678)位于
org.apache.xmlbeans.impl.piccolo.xml.piccolo.yylex(piccolo.java:1290)位于
org.apache.xmlbeans.impl.piccolo.xml.piccolo.yyprase(piccolo.java:1400)位于
org.apache.xmlbeans.impl.piccolo.xml.piccolo.parse(piccolo.java:714)位于
org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439)位于
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270)位于
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)位于
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)位于
org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument$Factory.parse(未知源代码)位于
org.apache.poi.xssf.model.StylesTable.readFrom(StylesTable.java:121)位于
org.apache.poi.xssf.model.StylesTable.(StylesTable.java:92)位于
sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)位于
位于的sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
位于的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
newInstance(Constructor.java:525)位于
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60)位于
org.apache.poi.poimmldocumentpart.read(poimmldocumentpart.java:403)位于
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155)位于
org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:207)位于
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107)位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于
位于的sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)上的java.lang.reflect.Method.invoke(Method.java:601)

将评论升级为答案

stacktrace的关键部分是:

Caused by: java.lang.OutOfMemoryError: Java heap space at 
java.util.Arrays.copyOfRange(Arrays.java:2694)
这说明Java没有足够的内存来存储处理文件所需的所有数据


如果您在增加JVM堆大小方面需要帮助,我建议您查看或,这两个选项都能让您了解所有内容。

我在读取.xlsx文件时也遇到了相同的异常

org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
Caused By :java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlBeans.typeSystemForClassLoadern

然后我删除了我的旧xmlbeans-2.0.jar,并放置了包含此方法的最新版本,现在解决了它。我在project中插入了
org.apache.xmlbeans
。它很有帮助。

与其他答案一样: 添加此依赖项:

<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.6.0</version>
</dependency>

org.apache.xmlbeans

这看起来是异常中令人厌烦的那一半……剩下的是什么?(由部分引起的将告诉您问题的真正原因)这个ApachePOIAPI对.xls文件运行良好,但对.xlsx文件似乎有问题,我在读取.xlsx文件时遇到了类似的异常,但能够读取.xls文件file@Satya..Apache POI对我来说在windows平台上的.xlsx文件工作正常。所有平台上的Apache POI都出现此异常吗?@Gagravarr。我添加了额外的异常跟踪。这表明内存不足异常。我正在读取的文件大约为1MB。读取这种大小的文件也会导致java堆空间错误吗?您是否尝试增加堆大小?如果您没有为java提供足够的内存,这是正常的修复方法…这正是我的问题,尽管我的错误略有不同(不是内存不足)