2012-03-23 11 views
8

Tengo un extraño problema:FileInputStream vs vs ClassPathResource getResourceAsStream y presentar la integridad

en src/main/resources tengo un archivo "template.xlsx".

si hago esto:

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

O esto:

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

O esto:

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

Cuando trato de crear un libro:

Workbook wb = new XSSFWorkbook(is); 

consigo este error:

java.util.zip.ZipException: invalid block type 

PERO, cuando llegue a mi archivo de la siguiente manera:

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

Funciona!

¿Qué pasa? No puedo codificar el camino completo al archivo.

¿Alguien me puede ayudar con esto?

Gracias

+1

¿Puede asegurarse de que cuando carga del classpath usted están * completamente * seguros de qué versión de 'template.xlsx' se está cargando? Un 'getResourceAsStream()' (y similares) puede cargar un recurso desde muchos lugares. Con el nombre de archivo, está absolutamente seguro de lo que se está cargando. –

Respuesta

18

Tuve el mismo problema, probablemente tengas un problema con el filtrado de maven.

Esta carga el archivo de la fuente de código, sin filtrar carga

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

Este código del archivo desde el directorio de destino, después experta ha filtrado el contenido

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

no filtrar los archivos binarios como sobresalga y use dos conjuntos de recursos mutuamente excluyentes como se describe en la parte inferior de esta página maven resources plugin

+0

¡Esto se debe al filtrado de maven y no al método utilizado para cargar la transmisión! Gracias :) –

+0

Muchas gracias por la respuesta, he pasado tantas horas en este problema (( –

+0

me salvó horas, gracias –

0

no has intente acceder a él como

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

?

Cuestiones relacionadas