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

你没有试着像一样访问它吗

InputStream is = new FileInputStream("/main/resources/template.xlsx");

相关内容

  • 没有找到相关文章

最新更新