FileInputStream与ClassPathResource与getResourceAsStream和文件完整性


问题内容

我有一个奇怪的问题:

在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的资源插件