Java – Lue tiedosto resurssikansiosta
Java-käyttöjärjestelmässä voimme käyttää getResourceAsStream
tai getResource
, jos haluat lukea tiedoston tai useita tiedostoja resources
-kansiosta tai luokan polun juuresta.
getResourceAsStream
-menetelmä palauttaa InputStream
-menetelmän.
getResource
menetelmä palauttaa URL
ja muuntaa sen normaalisti File
; Ei toimi JAR-tiedostossa.
Resurssikansion tiedostot
1.1 Tarkista src/main/resources
-kansiossa olevat tiedostot, myöhemmin pääsemme tiedostoihin ja tulostaa tiedoston sisältö.
1.2 Rakenna oletuksena työkalut, kuten Maven, Gradle , tai tavallinen Java-käytäntö kopioi kaikki tiedostot tiedostosta src/main/resources
target/classes
tai build/classes
. Joten kun yritämme lukea tiedostoa osoitteesta src/main/resources
, luemme tiedoston projektiluokan polun juuresta.
1.3 Alla on JAR-tiedostorakenne. Yleensä resources
-kansiossa olevat tiedostot kopioidaan luokan polun juurelle.
Hae tiedosto resurssikansiosta.
2.1 Seuraava esimerkki osoittaa getResourceAsStream
ja tapoja lukea tiedosto json/file1.json
resources
-kansiosta ja tulostaa tiedoston sisältö.
Huomautus
-
getResource
-menetelmä ei toimi JAR-tiedostossa. -
getResourceAsStream
-menetelmä toimii kaikkialla.
Tulos
2.2 Nyt pakataan projekti JAR-tiedostoon ja suoritetaan se; tällä kertaa getResource
epäonnistuu ja palauttaa joko NoSuchFileException
tai InvalidPathException
. Emme voi lukea JAR-tiedoston sisällä olevia tiedostoja resurssin URL-osoitteen kautta.
Suorita JAR-tiedosto Linuxissa (Ubuntu), se heittää NoSuchFileException
.
Suorita JAR-tiedosto Windowsissa, se heittää InvalidPathException
.
PS Tämä esimerkki käyttää Maven-laajennusta maven-jar-plugin
JAR-tiedoston luomiseen.
Hae tiedosto resurssikansiosta – Unit Test
3.1 Laitamme testiresurssit kansioon src/test/resources
yksikötestejä varten. Yleensä testiresurssien tiedostot kopioidaan target/test-classes
-kansioon.
3.2 Se toimii samalla tavalla luemme tiedoston kohdasta src/main/resources
. Käytämme samoja getResourceAsStream
– ja getResource
-menetelmiä tiedoston lukemiseen src/test/resources
. / p>
Tulos
Hae kaikki tiedostot resurssikansiosta. (EI-JAR-ympäristö)
Jos emme tiedä tarkkaa tiedostonimeä ja haluamme lukea kaikki tiedostot, mukaan lukien resurssikansion alikansiotiedostot, voimme käyttää NIO Files.walk
tiedostojen käyttämiseen ja lukemiseen.
4.1 Alla olevassa esimerkissä Files.walk
käytetään kaikkien tiedostojen lukemiseen kansiosta src/main/resources/json
:
Tulos
4.2 Vakio Files.walk
esimerkissä 4.1 ei voi käyttää JAR-tiedoston tiedostoja suoraan, yritä suorittaa esimerkki 4.1 JAR-ympäristössä ja se heittää FileSystemNotFoundException
.
Hae kaikki tiedostot resurssikansiosta. (JAR-versio)
5.1 Tämä esimerkki näyttää, kuinka Files.walk
kansio JAR-tiedoston sisällä FileSystems
ja URI jar:file:xxx.jar
.
Ajatus on:
- File kävelee kansiota JAR-tiedoston sisällä käyttämällä
FileSystems
, ja hae kaikki tiedostonimet, katsogetPathsFromResourceJAR()
- Silmennä kaikki tiedostonimet, käytä ja tulosta kukin tiedosto kuten esimerkki 2.1, katso
getFileFromResourceAsStream()
.
Tulos
Lataa lähdekoodi
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – URI: n syntakse ja muoto
- Maven – Luo JAR-tiedosto
- Zip File System Provider
- Java Files.walk -esimerkkejä
- Java – Hae käynnissä olevan JAR-tiedoston polku
mkyong
Mkyong.com -yhtiön perustaja, rakastavat Java ja avoimen lähdekoodin juttuja. Seuraa häntä Twitterissä. Jos pidät opetusohjelmistani, harkitse lahjoituksen tekemistä näille hyväntekeväisyysjärjestöille.