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
getResourcefunktioniert in der JAR-Datei nicht. - Die Methode
getResourceAsStreamfunktioniert ü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.