2012-03-23 1 views
8

같이 getResourceAsStream 대 및 파일 나는 이상한 문제가 있습니다.FileInputStream에 ClassPathResource가 대 무결성

내가 할 경우이 :

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

의미가 있습니다!

무엇이 잘못 되었나요? 파일에 대한 전체 경로를 하드 코드 할 수 없습니다.

누군가가 도와 줄 수 있습니까?

감사

+1

클래스 패스에서로드 할 때 'template.xlsx'의 어느 버전이로드되고 있는지 완전하게 * 확실합니까? 'getResourceAsStream()'(와 같은)은 여러 곳에서 리소스를로드 할 수 있습니다. 파일 이름으로 무엇이로드되고 있는지 절대적으로 확신 할 수 있습니다. –

답변

18

같은 문제가 있었는데, 아마도 maven 필터링에 문제가있을 수 있습니다.

이 코드로드 소스 파일, 대상 디렉토리에서 필터링되지 않은

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

이 코드로드 파일, 받는다는는 내용

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

을 필터링 한 후 필터링 안 바이너리 파일과 같은 이 페이지의 하단에 설명 된 바와 같이 상호 배타적 인 두 가지 리소스 세트를 사용하고 능가하십시오. maven resources plugin

+0

이것은 스트림을로드하는 데 사용되는 방법이 아닌 maven 필터링 때문입니다! 감사합니다 :) –

+0

답변을 주셔서 대단히 감사합니다, 나는이 문제 (( –

+0

시간을내어 주셔서 감사합니다.) –

0

당신이

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

처럼 접근하려고하지?