2012-03-23 8 views
8

Mam dziwny problem:FileInputStream vs ClassPathResource vs getResourceAsStream i złożyć integralności

w src/main/zasobów Mam "template.xlsx" plik.

Jeśli mogę to zrobić:

InputStream is = new ClassPathResource("template.xlsx").getInputStream(); 

albo to:

InputStream is = ClassLoader.getSystemResourceAsStream("template.xlsx"); 

Albo to:

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

Kiedy próbuję utworzyć skoroszyt:

Workbook wb = new XSSFWorkbook(is); 

otrzymuję ten błąd:

java.util.zip.ZipException: invalid block type 

ale kiedy ja dostać mój plik tak:

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

To działa!

Co jest nie tak? Nie mogę w pełni zakodować pełnej ścieżki do pliku.

Czy ktoś może mi w tym pomóc?

Dzięki

+1

Czy możesz upewnić się, że po wczytaniu ze ścieżki klasy są * całkowicie * pewni, która wersja 'template.xlsx' jest ładowana? 'GetResourceAsStream()' (i temu podobne) może załadować zasób z wielu miejsc. Dzięki nazwie pliku masz całkowitą pewność, co jest ładowane. –

Odpowiedz

18

Miałem ten sam problem, prawdopodobnie masz problem z filtrowaniem mavenów.

ten kod załadować plik ze źródła, niefiltrowane obciążenie

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

Kod ten plik z katalogu docelowego, po Maven odfiltrował treść

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

Nie należy filtrowania plików binarnych jak wypróbuj i użyj dwóch wzajemnie wykluczających się zestawów zasobów opisanych na dole tej strony. maven resources plugin

+0

Wynika to z filtrowania maven, a nie z metody użytej do załadowania strumienia! Dzięki :) –

+0

Dziękuję bardzo za odpowiedź, spędziłem tyle godzin na ten problem (( –

+0

Zapisane mi godziny, dzięki . –

0

nie próby dostępu do niego jak

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

?