Java – Číst soubor ze složky zdrojů
V Javě můžeme použít getResourceAsStream
nebo getResource
ke čtení souboru nebo více souborů ze resources
složky nebo kořene cesty ke třídě.
Metoda getResourceAsStream
vrací InputStream
.
getResource
metoda vrátí URL
a normálně ji převede na File
; Nepracuje v souboru JAR.
Soubory ve složce prostředků
1.1 Zkontrolujte soubory ve src/main/resources
, později k nim přistoupíme a vytiskněte obsah souboru.
1.2 Ve výchozím nastavení vytvářejte nástroje jako Maven, Gradle , nebo běžná praxe Java zkopíruje všechny soubory z src/main/resources
do kořenového adresáře target/classes
nebo build/classes
. Když se tedy pokusíme načíst soubor z src/main/resources
, načteme soubor z kořene třídy projektu.
1.3 Níže je struktura souborů JAR. Soubory ve složce resources
se obvykle zkopírují do kořenového adresáře cesty ke třídě.
Získejte soubor ze složky prostředků.
2.1 Následující příklad ukazuje použití getResourceAsStream
a getResource
metody pro čtení souboru json/file1.json
ze složky resources
a vytištění obsahu souboru.
Poznámka
- Metoda
getResource
nefunguje v souboru JAR. -
getResourceAsStream
metoda funguje všude.
výstup
2.2 Nyní zabalíme projekt do souboru JAR a spustíme jej; getResource
tentokrát selže a vrátí buď NoSuchFileException
nebo InvalidPathException
. Soubory uvnitř souboru JAR nemůžeme číst prostřednictvím adresy URL zdroje.
Spustit soubor JAR v systému Linux (Ubuntu), hodí NoSuchFileException
.
Spustí soubor JAR ve Windows, hodí InvalidPathException
.
PS This příklad používá plugin Maven maven-jar-plugin
k vytvoření souboru JAR.
Získat soubor ze složky zdrojů – Test jednotky
3.1 Testovací prostředky jsme umístili do složky src/test/resources
pro jednotkové testy. Soubory v testovacích prostředcích se obvykle zkopírují do složky target/test-classes
.
3.2 Funguje stejným způsobem čteme soubor z src/main/resources
. Ke čtení souboru z src/test/resources
používáme stejné getResourceAsStream
a getResource
metody. / p>
Výstup
Získejte všechny soubory ze složky prostředků. (Prostředí NON-JAR)
Pokud neznáme přesný název souboru a chceme číst všechny soubory, včetně souborů podsložek ze složky prostředků, můžeme použít NIO Files.walk
pro snadný přístup a čtení souborů.
4.1 Následující příklad používá Files.walk
ke čtení všech souborů ze složky src/main/resources/json
:
Výstup
4.2 Standardní Files.walk
v příkladu 4.1 nemá přímý přístup k souborům v souboru JAR, zkuste spustit příklad 4.1 v prostředí JAR a hodí FileSystemNotFoundException
.
Načíst všechny soubory ze složky prostředků. (Verze JAR)
5.1 Tento příklad ukazuje, jak Files.walk
složku uvnitř souboru JAR pomocí FileSystems
a URI jar:file:xxx.jar
.
Myšlenka je:
- Soubor prochází složku uvnitř souboru JAR pomocí
FileSystems
a získejte celý název souboru, vizgetPathsFromResourceJAR()
- Loop all the filename, access and print each file like example 2.1, see
getFileFromResourceAsStream()
.
Výstup
Stáhnout zdrojový kód
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Syntax a formát URI
- Maven – Vytvoření souboru JAR
- Poskytovatel systému souborů Zip
- Příklady Java Files.walk
- Java – Získejte cestu k běžícímu souboru JAR
mkyong
Zakladatel webu Mkyong.com. Miluje prostředí Java a open source. Sledujte ho na Twitteru. Pokud se vám moje výukové programy líbí, zvažte darování těchto charit.