通过apache poi读取excel文件(在classpath中)

我正在尝试读取(使用apache poi).xlsx文件,该文件不在文件系统中,但在类路径中。我正在使用Maven-因此它位于资源文件夹中。

我的代码是-

InputStream resourceAsStream = MyReader.class.getClassLoader().getResourceAsStream("test.xlsx");

Workbook wb = new XSSFWorkbook(resourceAsStream);

我收到此例外。

Caused by: java.lang.IllegalArgumentException: MALFORMED

at java.util.zip.ZipCoder.toString(ZipCoder.java:58) ~[?:1.7.0_51]

at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:297) ~[?:1.7.0_51]

at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:121) ~[?:1.7.0_51]

at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:51) ~[poi

a3]

at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:88) ~[poi-ooxml-3.11-beta3.jar:3.11-beta3]

at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:272) ~[poi-ooxml-3.11-beta3.jar:3.11-beta3]

at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) ~[poi-ooxml-3.11-beta3.jar:3.11-beta3]

当我从文件系统读取同一文件时,一切都很好。我的代码中有错误吗?还是想念一些东西?

UPDATE1:这是在Web应用程序中,因此代码已部署在tomcat 7中。

UPDATE2:当我以这种方式读取同一文件时,它可以工作。

File file = new File("C:\\Users\\.....\\test.xlsx");

FileInputStream fileInputStream = new FileInputStream(file);

Workbook wb = new XSSFWorkbook(fileInputStream);

谢谢

回答:

花了几天时间在这个问题上之后,我在stackoverflow))中找到了答案。

FileInputStream与ClassPathResource与getResourceAsStream和文件完整性

maven-resources-plugin过滤中的问题,它损坏了excel文件。

You should not filter binary files like excel and use two mutually exclusive resource sets as described at the bottom of this page

Maven资源插件

以上是 通过apache poi读取excel文件(在classpath中) 的全部内容, 来源链接: utcz.com/qa/399308.html

回到顶部