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
getResourcemódszer nem működik a JAR fájlban. - A
getResourceAsStreammó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.