Structure du répertoire de mon projet (dans Eclipse):
MyProject/
src/ --> "source directory" on Eclipse's classpath/buildpath
com.me.myapp
Driver
myconfig.txt
Dans Driver
, j'ai le code suivant:
public class Driver {
public static void main(String[] args) {
InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");
if(is == null)
System.out.println("input stream is null");
else
System.out.println("input stream is NOT null :-)");
}
}
Lorsque j'exécute cela, j'obtiens la sortie de console suivante:
input stream is null
Pourquoi? Ai-je placé myconfig.txt
dans un emplacement incorrect? Suis-je en train d'utiliser l'API ClassLoader de manière incorrecte? Autre chose? Merci d'avance!
Si c'est dans le même paquet, utilisez
InputStream is = Driver.class.getResourceAsStream("myconfig.txt");
La façon dont vous l'avez
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt");
Il recherche le fichier à la racine du chemin de classe. Vous pourriez utiliser
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt");
Les règles de recherche sont expliquées dans le javadoc de ClassLoader#getResource(String)
et le javadoc de Class#getResource(String)
.
Si vous travaillez avec Maven, ajoutez les lignes suivantes sous la balise BUILD . Vous obtenez cette erreur lorsque vous exécutez l'application Web sur le serveur, mais il n'y a aucune référence aux ressources sur le serveur.
Alors, ajoutez ceci dans votre POM.xml et voyez la magie.
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>fileName.txt</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>fileName.wsdl</include>
</includes>
</resource>
</resources>
S'amuser.!!!