Java – Fájl olvasása az erőforrások mappából
Java-ban használhatjuk a getResourceAsStream
vagy getResource
fájl vagy több fájl olvasásához az resources
mappából vagy az osztályút gyökeréből.
A getResourceAsStream
metódus egy InputStream
eredményt ad vissza.
A getResource
metódus egy URL
értéket ad vissza, és általában átalakítja File
-be; Nem működik a JAR fájlban.
Fájlok az erőforrások mappában
1.1 Tekintse át a src/main/resources
fájlokat, később hozzáférünk a fájlokhoz és nyomtassa ki a fájl tartalmát.
1.2 Alapértelmezés szerint olyan eszközöket készítsen, mint a Maven, a Gradle , vagy a Java szokásos gyakorlata az összes fájlt átmásolja a src/main/resources
fájlból a target/classes
vagy a build/classes
. Tehát, amikor megpróbálunk egy fájlt olvasni a src/main/resources
fájlból, akkor a fájlt a projekt osztálygyökér gyökeréből olvassuk.
1.3 Az alábbiakban egy JAR fájlstruktúra található. Általában a resources
mappában lévő fájlok az osztályút gyökerére másolódnak.
Fájl letöltése az erőforrások mappából.
2.1 Az alábbi példa bemutatja a getResourceAsStream
és a módszerek egy fájl json/file1.json
beolvasására a resources
mappából, és a fájl tartalmának kinyomtatásához.
Megjegyzés
- A
getResource
módszer nem működik a JAR fájlban. - A
getResourceAsStream
módszer mindenhol működik.
Kimenet
2.2 Most egy JAR fájlba csomagoljuk a projektet, és futtatjuk; ezúttal a getResource
nem fog sikerülni, és vagy NoSuchFileException
, vagy InvalidPathException
értéket adja vissza. Nem tudjuk elolvasni a JAR fájlban lévő fájlokat az erőforrás URL-jén keresztül.
Futtassa a JAR fájlt Linuxon (Ubuntu), ez dobja a NoSuchFileException
fájlt.
Futtassa a JAR fájlt Windows rendszeren, és dobja a InvalidPathException
fájlt.
PS Ez A példa a Maven beépülő modult használja: maven-jar-plugin
a JAR fájl létrehozásához.
Fájl letöltése az erőforrások mappából – Unit Test
3.1 A teszt erőforrásokat a src/test/resources
mappába tesszük az egység tesztek céljából. Általában a teszt erőforrásokban lévő fájlok a target/test-classes
mappába másolódnak.
3.2 Működik ugyanúgy olvassuk el a fájlt a src/main/resources
ből. Ugyanazokat a getResourceAsStream
és getResource
módszereket használjuk a fájl beolvasásához a src/test/resources
fájlból.
Kimenet
Az összes fájl beszerzése egy erőforrásmappából. (NON-JAR környezet)
Ha nem ismerjük a pontos fájlnevet, és az összes fájlt el akarjuk olvasni, beleértve az alkönyvtár fájlokat is egy erőforrás mappából, használhatjuk a NIO Files.walk
a fájlok egyszerű eléréséhez és olvasásához.
4.1 Az alábbi példa a Files.walk
fájlt használja az összes fájl elolvasásához egy mappából src/main/resources/json
:
Kimenet
4.2 Azonban a szokásos Files.walk
a 4.1 példában nem tud közvetlenül hozzáférni a JAR fájl fájljaihoz, próbálja meg futtatni a 4.1 példát JAR környezetben, és ez dobja az FileSystemNotFoundException
<. / p>
Az összes fájl beszerzése egy erőforrás mappából. (JAR verzió)
5.1 Ez a példa bemutatja, hogyan lehet Files.walk
mappát tárolni egy JAR fájlban a FileSystems
és az URI segítségével. jar:file:xxx.jar
.
Az ötlet a következő:
- A File a , és megkapja az összes fájlnevet, lásd:
getPathsFromResourceJAR()
- Hurokolja az összes fájlnevet, hozzáférjen és nyomtassa ki az egyes fájlokat, például a 2.1 példát, lásd:
getFileFromResourceAsStream()
.
Kimenet
Forráskód letöltése
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – URI szintaxisa és formátuma
- Maven – JAR fájl létrehozása
- Zip fájlrendszer-szolgáltató
- Java Files.walk példák
- Java – Futtassa a futó JAR fájl elérési útját
mkyong
Az Mkyong.com alapítója, szereti a Java-t és a nyílt forráskódú dolgokat. Kövesse őt a Twitteren. Ha tetszik az oktatóanyagaim, fontolja meg, hogy adományozna ezeknek a jótékonysági szervezeteknek.