In Java-Webanwendung: Angenommen, ich möchte den InputStream einer XML-Datei abrufen, die im CLASSPATH (dh im Ordner sources) abgelegt ist Ich tue es?Abrufen des Eingangsstroms aus einer Klassenpfadressource (XML-Datei)
Antwort
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.
someClassWithinYourSourceDir.getClass(). GetResourceAsStream();
oder 'getClass(). GetResourceAsStream (" ... ")' usw. – rogerdpack
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.
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
und stellen Sie sicher, dass das Kompilierungsskript die XML-Datei an den Speicherort in Ihrem CLASSPATH kopiert.
ClassLoader.class.getResourceAsStream("/path/file.ext");
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
Einige der "getResourceAsStream()" Optionen in dieser Antwort nicht für mich arbeiten, aber dieser tat.
SomeClassWithinYourSourceDir.class.getClassLoader() getResourceAsStream ("yourResource");
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:
ProjektRechtsklick -> 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.
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').
- 1. Spring: Inject URL für Klassenpfadressource
- 2. Abrufen des Werts einer Ganzzahlvariablen
- 3. BeanDefinitionStoreException: Unerwartete Ausnahme beim Analysieren des XML-Dokuments aus der Klassenpfadressource [xx-config.xml];
- 4. Abrufen des vollständigen Pfads der DLLs aus einer PE-Importtabelle
- 5. Abrufen des entfernten Texts aus einer Java-Textkomponente
- 6. Abrufen von Listenelementfeldwerten aus einer SP-Liste mithilfe des Clientobjektmodells
- 7. Speichern und Abrufen des JCS-Caches aus einer Datei
- 8. Abrufen des Sitzungs-ID-Werts aus einer JSF-Anforderung
- 9. Knoten js Abrufen des Ordnerpfads aus einer Datei
- 10. Abrufen des Datenbanknamens aus der Bak-Datei
- 11. Abrufen des Basispfads aus dem Zend-Framework
- 12. Abrufen des Textstatus aus ServiceNow REST API
- 13. Abrufen einer Daten aus mongodb
- 14. Abrufen des Modellnamens aus der Modellinstanz YII
- 15. Abrufen des ausgewählten Elements aus der Listbox
- 16. Abrufen des Modulobjekts aus dem Stapelrahmen
- 17. Abrufen des Textwerts aus Element in BeautifulSoup
- 18. Abrufen des Dateiinstallationspfads aus der Registrierung
- 19. Abrufen des Ordnernamens aus einem Pfad
- 20. Abrufen des Zertifikatsablaufdatums aus dem embedded.mobileprovision-Bereitstellungsprofil
- 21. Abrufen des Sitzungsfactory-Objekts aus .xml
- 22. Abrufen des aktuellen Metrikwerts aus Graphit
- 23. Abrufen des angemeldeten Benutzernamens aus der Webanwendung
- 24. Abrufen des Clientgebietsschemas in einer Trikotanforderung
- 25. Abrufen des Datums einer .NET-Assembly
- 26. Abrufen einer einzelnen Spalte aus einer Entität
- 27. Abrufen einer unique_ptr aus einer Prioritätswarteschlange
- 28. Abrufen einer Zeichenfolge aus einer TextCtrl-Box
- 29. Zertifikat-Ablaufdatum aus einer .ipa-Datei abrufen?
- 30. Abrufen des Namens des Makefiles aus dem Makefile
Kontakt Beitrag für ein Code-Beispiel: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata-in.html – JVerstry
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
Bitte fügen Sie @ khylos Vorschlag zu Ihrer Antwort hinzu! – froginvasion