2009-04-27 6 views

Antwort

73

ClassLoader.getResourceAsStream().

Wie im Kommentar unten angegeben, müssen Sie möglicherweise Thread.currentThread().getContextClassLoader() verwenden, wenn Sie sich in einer Multi-ClassLoader-Umgebung befinden (z. B. Komponententests, Webapps usw.). Siehe http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.

+0

Kontakt Beitrag für ein Code-Beispiel: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html – JVerstry

+12

Wenn Sie sich in einer Multi-Classloader-Umgebung befinden (z. B. Komponententests/Webapps usw.), müssen Sie möglicherweise diesen Thread verwenden .currentThread(). getContextClassLoader(). Siehe http://stackoverflow.com/questions/2308188/getresourceasstream-viles-fileinputstream/2308388#comment21307593_2308388 – khylo

+0

Bitte fügen Sie @ khylos Vorschlag zu Ihrer Antwort hinzu! – froginvasion

5

someClassWithinYourSourceDir.getClass(). GetResourceAsStream();

+0

oder 'getClass(). GetResourceAsStream (" ... ")' usw. – rogerdpack

10

Das hängt davon ab, wo genau die XML-Datei ist. Ist es im Quellenordner (im "Standardpaket" oder im "Stammverzeichnis") oder im selben Ordner wie die Klasse?

In früheren Fall müssen Sie "/file.xml" (beachten Sie den führenden Schrägstrich), um die Datei zu finden und es spielt keine Rolle, welche Klasse Sie verwenden, um es zu finden.

Wenn die XML-Datei neben einer Klasse ist, ist SomeClass.class.getResourceAsStream() mit nur dem Dateinamen der Weg zu gehen.

10

ClassLoader.class.getResourceAsStream("/path/to/your/xml") und stellen Sie sicher, dass das Kompilierungsskript die XML-Datei an den Speicherort in Ihrem CLASSPATH kopiert.

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

aber Web bereitstellen app in tomcat auf diese Weise wird Fehler erhalten: 'java.lang.NullPointerException: null', und die einfachste Art, die ich denke, ist 'New ClassPathResource ("/Pfad/zu/Ihrer/Datei "). getInputStream()' – zhuguowei

4

Einige der "getResourceAsStream()" Optionen in dieser Antwort nicht für mich arbeiten, aber dieser tat.

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

0

standardmäßig hinzugefügt jede Ressource auf den Classpath in einer Web-Anwendung wird Ordner im entfalteten Krieg unter WEB-INF/classes kopiert.

Sie können diese verwalten, während die Anwendung in Eclipse durch die Entwicklung:

Projekt

Rechtsklick -> Eigenschaften -> Java Build Path -> Registerkarte Quelle -> Standardausgabeordner

In Ihrem Servlet, Sie können auf die Ressource zugreifen, indem Sie ihrem Pfad das Präfix '/' voranstellen, das auf WEB-INF/classes verweist.

Zum Beispiel Um pdf-sample.pdf unter WEB-INF/classes zuzugreifen, können Sie die folgenden verwenden:

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

Diese tutorial erklären sehr gut die Möglichkeiten des Lesens Eine Ressourcendatei von Classpath in einer Java-Anwendung, es ist lesenswert.

0

Ich versuchte vorgeschlagene Lösung und Schrägstrich im Dateinamen nicht funktioniert für mich, Beispiel: ...(). GetResourceAsStream ("/ my.properties"); null wurde zurückgegeben

Entfernen der Schrägstrich gearbeitet: .... getResourceAsStream ("meine.Eigenschaften ");

hier aus doc API ist: Bevor Delegation, ein absoluter Ressourcenname aus den angegebenen Ressourcennamen mit diesem Algorithmus aufgebaut ist:

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'). 
Verwandte Themen