我有一个奇怪的问题:
在src/main/resources中,我有一个"template.xlsx"文件。
如果我这样做:
InputStream is = new ClassPathResource("template.xlsx").getInputStream();
或者这个:
InputStream is = ClassLoader.getSystemResourceAsStream("template.xlsx");
或者这个:
InputStream is = getClass().getResourceAsStream("/template.xlsx");
当我尝试创建工作簿时:
Workbook wb = new XSSFWorkbook(is);
我得到这个错误:
java.util.zip.ZipException: invalid block type
但是,当我得到这样的文件:
InputStream is = new FileInputStream("C:/.../src/main/resources/template.xlsx");
它有效!
怎么了?我无法硬编码文件的完整路径。
有人能帮我吗?
感谢
我遇到了同样的问题,您可能在maven过滤方面有问题。
此代码从源加载文件,未经过滤的
InputStream is = new FileInputStream("C:/.../src/main/resources/template.xlsx");
在maven过滤了内容之后,此代码从目标目录加载文件
InputStream is = getClass().getResourceAsStream("/template.xlsx");
您不应该过滤像excel这样的二进制文件,并使用两个互斥的资源集,如本页底部所述。maven资源插件
你没有试着像一样访问它吗
InputStream is = new FileInputStream("/main/resources/template.xlsx");