FileInputStream против ClassPathResource против getResourceAsStream и целостность файла - PullRequest
10 голосов
/ 23 марта 2012

У меня странная проблема:

в 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");

Работает!

Что не так? Я не могу жестко указать полный путь к файлу.

Может кто-нибудь помочь мне с этим?

Спасибо

Ответы [ 2 ]

19 голосов
/ 25 апреля 2012

У меня была такая же проблема, возможно, у вас проблема с фильтрацией maven.

Этот код загружает файл из исходного, нефильтрованного

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

Этот код загружает файл из целевого каталога после того, как maven отфильтровывает содержимое

InputStream is = getClass().getResourceAsStream("/template.xlsx");

Вы не должны фильтровать двоичные файлы, такие как Excel, и использовать два взаимоисключающих набора ресурсов, как описано в нижней части этой страницы. Плагин ресурсов Maven

0 голосов
/ 23 марта 2012

вы не пытались получить к нему доступ, как

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

...