I am trying to read (using apache poi) a .xlsx file which is not in the file system, but in the classpath. I am using maven - so this is in the resources folder.
my code is
InputStream resourceAsStream = MyReader.class.getClassLoader().getResourceAsStream("test.xlsx"); Workbook wb = new XSSFWorkbook(resourceAsStream);
I get this exception.
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]
When I read the same file from the file system, everything is fine. Is there a mistake in my code or am I missing something to understand?
UPDATE1: This is in a web application, so the code is deployed to tomcat 7.
UPDATE2: when I read the same file this way - it works.
File file = new File("C:\\Users\\.....\\test.xlsx"); FileInputStream fileInputStream = new FileInputStream(file); Workbook wb = new XSSFWorkbook(fileInputStream);
thanks
java classpath maven excel apache-poi
user1321466
source share