Dans mon projet Maven, j'ai un fichier xls dans src/main/resources. Quand je l'ai lu comme ceci:
InputStream in = new
FileInputStream("src/main/resources/WBU_template.xls");
tout va bien.
Cependant, je veux le lire comme InputStream avec getResourceAsStream. Lorsque je fais cela, avec ou sans barre oblique, je reçois toujours un NPE.
private static final String TEMPLATEFILE = "/WBU_template.xls";
InputStream in = this.getClass.getResourceAsStream(TEMPLATEFILE);
Peu importe si la barre oblique est là ou non, ou si j'utilise la méthode getClassLoader (), j'obtiens toujours un NullPointer.
J'ai également essayé ceci:
URL u = this.getClass().getResource(TEMPLATEFILE);
System.out.println(u.getPath());
la console dit .../target/classes/WBU_template.xls puis récupère mon NullPointer.
Qu'est-ce que je fais mal ?
FileInputStream chargera un chemin de fichier que vous transmettez au constructeur comme relatif à partir du répertoire de travail du processus Java.
getResourceAsStream () chargera un chemin de fichier relatif à partir du chemin de classe de votre application.
Lorsque vous utilisez .getClass().getResource(fileName)
, il considère que l'emplacement de fileName est le même emplacement que celui de la classe appelante.
Lorsque vous utilisez .getClass().getClassLoader().getResource(fileName)
, il considère que l'emplacement du nom de fichier est la racine - en d'autres termes, le dossier bin.
Le fichier doit se trouver dans src/main/resources
Lors du chargement à l'aide du chargeur de classe
En bref, vous devez utiliser .getClass().getClassLoader().getResource(fileName)
pour charger le fichier dans votre cas.
Je charge généralement des fichiers de WEB-INF comme celui-ci
session.getServletContext().getResourceAsStream("/WEB-INF/WBU_template.xls")