当前位置: 首页 > 面试题库 >

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

沈凯康
2023-03-14
问题内容

我正在尝试读取(使用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资源插件



 类似资料:
  • 本文向大家介绍通过openpyxl读取excel文件过程解析,包括了通过openpyxl读取excel文件过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了通过openpyxl读取excel文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、环境准备 python3环境、安装openpyxl模块 2、excel文件数

  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。

  • 我是编程界的新手。嗯,我正在尝试使用ApachePOI库读取excel文件(5行5列)。我实际上有两个相同问题的实现。在第一个代码片段中,我只是读取excel文件并将其打印到控制台中。 然而,现在我正试图将读取的excel数据保存到一个数组中。所以我想在动态获取excel行和列大小后设置数组大小。但令我惊讶的是,当我执行第二个代码段时,似乎“while(cellIterator.hasNext()

  • 有人能帮助创建一个硒TestNgXML文件动态通过Java程序如下格式。 仅对于那些在Excel中标记为yes的测试用例,将从excel文件(这是一个测试套件,控制执行)中读取类名。仅供参考,控制执行(测试套件引擎)的Excel文件包含列TCName、Run(yes/No)和每个测试的类名。

  • 我正在使用Selenium Java和使用Apache POI的TestNG开发一个POC。我有一个excel表,其中A列包含url,B列包含是否使用相应的url读取/执行的状态(是或否)。我想在C列中保存执行状态pass/fail。 我面临的问题是: > 有时我会遇到NullPointerException 更新-2:

  • 问题内容: 如何从Java中classpath读取文本文件? 问题答案: 在类路径上的目录中,从同一类加载器加载的类中,你应该能够使用以下任一种: 如果这些都不起作用,则表明还有其他问题。 因此,例如,使用以下代码: 而这个目录结构: 然后(使用Linux机器上的Unix路径分隔符): 结果: