2012-03-23 11 views
8

Ho un problema strano:FileInputStream vs ClassPathResource vs getResourceAsStream e file integrità

in src/main/risorse ho un file "template.xlsx".

se faccio questo:

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

O questo:

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

O questo:

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

Quando provo a creare una cartella di lavoro:

Workbook wb = new XSSFWorkbook(is); 

ottengo questo errore:

java.util.zip.ZipException: invalid block type 

MA, quando ottengo il mio file in questo modo:

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

Funziona!

Cosa c'è che non va? Non riesco a hardcode il fullpath del file.

Qualcuno può aiutarmi con questo?

Grazie

+1

Puoi assicurarti che quando carichi dal classpath tu sono * completamente * sicuro di quale versione di 'template.xlsx' viene caricata? Un 'getResourceAsStream()' (e simili) può caricare una risorsa da molte posizioni. Con il nome del file sei assolutamente sicuro di cosa viene caricato. –

risposta

18

Ho avuto lo stesso problema, probabilmente hai un problema con il filtro Maven.

questo codice carico il file dalla fonte, non filtrato carico

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

Questo codice il file dalla directory di destinazione, dopo Maven ha filtrato il contenuto

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

Si consiglia di non filtrare i file binari come eccellere e utilizzare due set di risorse che si escludono a vicenda come descritto nella parte inferiore di questa pagina maven resources plugin

+0

Ciò è dovuto al filtro Maven e non al metodo utilizzato per caricare il flusso! Grazie :) –

+0

Grazie mille per la risposta, ho trascorso così tante ore su questo problema (( –

+0

Salvato ora, grazie –

0

non hai provare ad accedere a esso come

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

?

Problemi correlati