2009-04-27 15 views

Répondre

73

ClassLoader.getResourceAsStream().

Comme indiqué dans le commentaire ci-dessous, si vous vous trouvez dans un environnement multi-environnement (tests unitaires, webapps, etc.), vous devrez peut-être utiliser Thread.currentThread().getContextClassLoader(). Voir http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.

+0

Voir message personnel pour un exemple de code: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html – JVerstry

+12

Si vous êtes dans un environnement multi-chargeurs (tel que tests unitaires/webapps etc), vous devrez peut-être utiliser ce thread .currentThread(). getContextClassLoader(). Voir http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 – khylo

+0

Veuillez ajouter la suggestion de @ khylo à votre réponse! – froginvasion

5

someClassWithinYourSourceDir.getClass(). GetResourceAsStream();

+0

ou 'getClass(). GetResourceAsStream (" ... ")' etc – rogerdpack

10

Cela dépend de l'emplacement exact du fichier XML. Est-ce dans le dossier sources (dans le "package par défaut" ou le "root") ou dans le même dossier que la classe?

Dans le premier cas, 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.

10

ClassLoader.class.getResourceAsStream("/path/to/your/xml") et assurez-vous que votre script de compilation copie le fichier xml dans votre CLASSPATH.

26
ClassLoader.class.getResourceAsStream("/path/file.ext"); 
+0

mais si déployer web app dans Tomcat de cette façon obtiendra erreur: 'java.lang.NullPointerException: null', et la façon la plus simple je pense est 'new ClassPathResource ("/chemin/vers/votre/fichier "). getInputStream()' – zhuguowei

4

Certains des "getResourceAsStream()" options dans cette réponse ne fonctionne pas pour moi, mais celui-ci a fait.

SomeClassWithinYourSourceDir.class.getClassLoader() getResourceAsStream ("yourResource");

0

Par défaut, chaque ressource ajoutée au classpath dans une application Web est copié sous dossier WEB-INF/classes dans la guerre déployée.

vous pouvez gérer ce tout en développant l'application dans Eclipse par:

projet Clic droit -> propriétés -> Chemin de génération Java -> onglet Source -> dossier de sortie par défaut

Dans votre servlet, vous pouvez accéder à la ressource en préfixant son chemin avec '/' qui pointe vers WEB-INF/classes.

Par exemple, Pour accéder à pdf-exemple.pdf sous WEB-INF/classes, vous pouvez utiliser les éléments suivants:

getClass().getResourceAsStream("/pdf-sample.pdf") 

Ce tutorial explique très bien les moyens possibles de lecture un fichier de ressources de classpath dans une application Java, ça vaut le coup de lire.

0

J'ai essayé la solution proposée et la barre oblique dans le nom de fichier n'a pas fonctionné pour moi, par exemple: ...(). GetResourceAsStream ("/ my.properties"); null a été renvoyé

Suppression de la barre oblique: .... getResourceAsStream ("my.Propriétés "),

Voici de l'API doc: Avant délégation, un nom de ressource absolue est construit à partir du nom de la ressource donnée 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').