user1321466 user1321466 - 3 years ago 225
Java Question

read excel file(which is in classpath ) via apache poi

I am trying to read (using apache poi) .xlsx file which is not in file system but in classpath. I am using maven - so it is in resources folder.

my code is -

InputStream resourceAsStream = MyReader.class.getClassLoader().getResourceAsStream("test.xlsx");
Workbook wb = new XSSFWorkbook(resourceAsStream);

I am getting this exception.

Caused by: java.lang.IllegalArgumentException: MALFORMED
at ~[?:1.7.0_51]
at ~[?:1.7.0_51]
at ~[?:1.7.0_51]
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>( ~[poi
at org.apache.poi.openxml4j.opc.ZipPackage.<init>( ~[poi-ooxml-3.11-beta3.jar:3.11-beta3]
at ~[poi-ooxml-3.11-beta3.jar:3.11-beta3]
at ~[poi-ooxml-3.11-beta3.jar:3.11-beta3]

When I read same file from file system everything is fine.
Is there a bug in my code or do I miss understand something?

UPDATE1: This is in web app, so code is deployed in tomcat 7.

UPDATE2: when I read same file in this way - it works.

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

Workbook wb = new XSSFWorkbook(fileInputStream);


Answer Source

After spending days on this problem I found an answer in stackoverflow )). FileInputStream vs ClassPathResource vs getResourceAsStream and file integrity

the problem in maven-resources-plugin filtering, it corrupts excel file .

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

maven resources plugin

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download