Dans une application Web Java, supposons que si je souhaite obtenir le flux InputStream d’un fichier XML placé dans CLASSPATH (dans le dossier sources , par exemple), comment procéder?
ClassLoader.getResourceAsStream()
.
Comme indiqué dans le commentaire ci-dessous, si vous êtes dans un environnement multi -ClassLoader
(test d'unité, applications Web, etc.), vous devrez peut-être utiliser Thread.currentThread().getContextClassLoader()
. Voir http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .
ClassLoader.class.getResourceAsStream("/path/file.ext");
Cela dépend de l'emplacement exact du fichier XML. Est-ce dans le dossier sources (dans le "paquet par défaut" ou la "racine") ou dans le même dossier que la classe?
Dans le cas précédent, vous devez utiliser "/file.xml
" (notez la barre oblique) pour trouver le fichier et peu importe la classe que vous utilisez pour essayer de le localiser.
Si le fichier XML est à côté d'une classe, SomeClass.class.getResourceAsStream()
avec juste le nom de fichier est le chemin à parcourir.
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
et assurez-vous que votre script de compilation copie le fichier xml vers où dans votre CLASSPATH.
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
Certaines des options "getResourceAsStream ()" de cette réponse n'ont pas fonctionné pour moi, mais celle-ci a fonctionné:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("yourResource");
J'ai essayé la solution proposée et la barre oblique dans le nom du fichier ne fonctionnait pas, par exemple: ... (). GetResourceAsStream ("/ my.properties"); null a été retourné
Supprimer la barre oblique a fonctionné: .... getResourceAsStream ("my.properties");
Voici de la doc API: Avant la délégation, un nom de ressource absolu est construit à partir du nom de ressource donné en utilisant cet algorithme:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').