FileInputStream vs ClassPathResource vs getResourceAsStream e integridad de archivo

Tengo un extraño problema

in 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 intento crear un libro de trabajo:

Workbook wb = new XSSFWorkbook(is);

Me sale este error:

java.util.zip.ZipException: invalid block type

PERO, cuando obtengo mi archivo así:

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

Funciona

Qué está mal ? No puedo codificar la ruta completa al archivo.

Puede alguien ayudarme con esto

Gracia

Respuestas a la pregunta(4)

Su respuesta a la pregunta