Java – Lesen einer Datei aus dem Ressourcenordner
In Java können wir oder getResource
zum Lesen einer Datei oder mehrerer Dateien aus einem resources
Ordner oder Stammverzeichnis des Klassenpfads.
Die Methode getResourceAsStream
gibt eine InputStream
zurück.
Die getResource
gibt eine URL
zurück und konvertiert sie normalerweise in eine File
. Funktioniert nicht in JAR-Datei.
Dateien im Ressourcenordner
1.1 Überprüfen Sie die Dateien im src/main/resources
. Später werden wir auf die Dateien und zugreifen Drucken Sie den Dateiinhalt aus.
1.2 Erstellen Sie standardmäßig Tools wie Maven, Gradle oder die gängige Java-Praxis kopiert alle Dateien von src/main/resources
in das Stammverzeichnis von target/classes
oder build/classes
. Wenn wir also versuchen, eine Datei aus src/main/resources
zu lesen, lesen wir die Datei aus dem Stammverzeichnis des Projektklassenpfads.
1.3 Nachfolgend finden Sie eine JAR-Dateistruktur. Normalerweise werden die Dateien im Ordner resources
in das Stammverzeichnis des Klassenpfads kopiert.
Ruft eine Datei aus dem Ressourcenordner ab.
2.1 Das folgende Beispiel zeigt die Verwendung von getResourceAsStream
und Methoden zum Lesen einer Datei json/file1.json
aus dem Ordner resources
und zum Ausdrucken des Dateiinhalts.
Hinweis
- Die Methode
getResource
funktioniert in der JAR-Datei nicht. - Die Methode
getResourceAsStream
funktioniert überall.
Ausgabe
2.2 Nun packen wir das Projekt in eine JAR-Datei und führen es aus. Dieses Mal schlägt die getResource
fehl und gibt entweder NoSuchFileException
oder InvalidPathException
zurück. Wir können die Dateien in der JAR-Datei nicht über die Ressourcen-URL lesen.
Führen Sie die JAR-Datei unter Linux (Ubuntu) aus. Sie löst NoSuchFileException
aus.
Führen Sie die JAR-Datei unter Windows aus und es wird InvalidPathException
ausgelöst.
PS Dies Beispiel verwendet das Maven-Plugin maven-jar-plugin
, um die JAR-Datei zu erstellen.
Ruft eine Datei aus dem Ressourcenordner ab – Unit Test
3.1 Wir legen die Testressourcen für Unit-Tests im Ordner src/test/resources
ab. Normalerweise werden die Dateien in den Testressourcen in den Ordner target/test-classes
kopiert.
3.2 Es funktioniert Auf die gleiche Weise lesen wir die Datei aus src/main/resources
. Wir verwenden die gleichen Methoden getResourceAsStream
und getResource
, um die Datei aus der src/test/resources
zu lesen.
Ausgabe
Ruft alle Dateien aus einem Ressourcenordner ab. (NON-JAR-Umgebung)
Wenn wir den genauen Dateinamen nicht kennen und alle Dateien, einschließlich Unterordnerdateien, aus einem Ressourcenordner lesen möchten, können wir NIO , um einfach auf die Dateien zuzugreifen und sie zu lesen.
4.1 Im folgenden Beispiel wird Files.walk
verwendet, um alle Dateien aus einem Ordner zu lesen src/main/resources/json
:
Ausgabe
4.2 Der Standard Files.walk
in Beispiel 4.1 kann nicht direkt auf die Dateien in der JAR-Datei zugreifen. Versuchen Sie, Beispiel 4.1 in einer JAR-Umgebung auszuführen, und es wird FileSystemNotFoundException
.
Ruft alle Dateien aus einem Ressourcenordner ab. (JAR-Version)
5.1 Dieses Beispiel zeigt, wie Files.walk
ein Ordner in einer JAR-Datei über FileSystems
und URI erstellt wird jar:file:xxx.jar
.
Die Idee ist:
- Datei durchsucht den Ordner in einer JAR-Datei mit und erhalten Sie den gesamten Dateinamen, siehe
getPathsFromResourceJAR()
- Schleifen Sie den gesamten Dateinamen, greifen Sie auf jede Datei zu und drucken Sie sie wie in Beispiel 2.1 aus, siehe
getFileFromResourceAsStream()
.
Ausgabe
Quellcode herunterladen
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Syntax und Format eines URI
- Maven – JAR-Datei erstellen
- Zip-Dateisystemanbieter
- Java Files.walk-Beispiele
- Java – Rufen Sie den Pfad einer laufenden JAR-Datei ab.
mkyong
Gründer von Mkyong.com, liebe Java und Open Source. Folgen Sie ihm auf Twitter. Wenn Ihnen meine Tutorials gefallen, können Sie eine Spende an diese Wohltätigkeitsorganisationen leisten.