Java – Citiți un fișier din folderul de resurse
În Java, putem folosi getResourceAsStream
sau getResource
pentru a citi un fișier sau mai multe fișiere dintr-un folder resources
sau din rădăcina clasei.
Metoda getResourceAsStream
returnează un InputStream
.
getResource
metoda returnează un URL
și îl convertește în mod normal într-un File
; Nu funcționează în fișierul JAR.
Fișierele din folderul resurse
1.1 Revedeți fișierele din src/main/resources
, ulterior vom accesa fișierele și tipăriți conținutul fișierului.
1.2 În mod implicit, creați instrumente precum Maven, Gradle , sau practica obișnuită Java va copia toate fișierele de la src/main/resources
la rădăcina target/classes
sau build/classes
. Deci, când încercăm să citim un fișier din src/main/resources
, citim fișierul din rădăcina căii de curs a proiectului.
1.3 Mai jos este o structură de fișier JAR. De obicei, fișierele din folderul resources
se vor copia în rădăcina clasei.
Obțineți un fișier din folderul resurse.
2.1 Exemplul de mai jos demonstrează utilizarea getResourceAsStream
și getResource
metode pentru a citi un fișier json/file1.json
din folderul resources
și a imprima conținutul fișierului.
Notă
- Metoda
getResource
nu funcționează în fișierul JAR. -
getResourceAsStream
metoda funcționează peste tot.
Output
2.2 Acum, ambalăm proiectul într-un fișier JAR și îl rulăm; de această dată, getResource
va eșua și returnează fie NoSuchFileException
, fie InvalidPathException
. Nu putem citi fișierele din fișierul JAR prin URL-ul resursei.
Rulați fișierul JAR pe Linux (Ubuntu), acesta aruncă NoSuchFileException
.
Rulați fișierul JAR pe Windows, acesta aruncă InvalidPathException
.
PS Aceasta exemplu folosește pluginul Maven maven-jar-plugin
pentru a crea fișierul JAR.
Obțineți un fișier din folderul resurse – Test de unitate
3.1 Am pus resursele de testare în folderul src/test/resources
pentru testele unitare. De obicei, fișierele din resursele de testare se vor copia în folderul target/test-classes
.
3.2 Funcționează în același mod în care citim fișierul din src/main/resources
. Folosim aceleași metode getResourceAsStream
și getResource
pentru a citi fișierul din src/test/resources
.
Output
Obțineți toate fișierele dintr-un folder de resurse. (Mediu NON-JAR)
Dacă nu știm exact numele fișierului și dorim să citim toate fișierele, inclusiv fișierele sub-folder dintr-un folder resurse, putem folosi NIO Files.walk
pentru a accesa și citi cu ușurință fișierele.
4.1 Exemplul de mai jos folosește Files.walk
pentru a citi toate fișierele dintr-un folder src/main/resources/json
:
Output
4.2 Cu toate acestea, standardul Files.walk
în exemplul 4.1 nu poate accesa direct fișierele din fișierul JAR, încercați să rulați exemplul 4.1 într-un mediu JAR și aruncă FileSystemNotFoundException
.
Obțineți toate fișierele dintr-un folder de resurse. (Versiunea JAR)
5.1 Acest exemplu arată cum să Files.walk
un folder în interiorul unui fișier JAR prin FileSystems
și URI jar:file:xxx.jar
.
Ideea este:
- Fișierul parcurge folderul într-un fișier JAR folosind
FileSystems
și obțineți tot numele fișierului, consultațigetPathsFromResourceJAR()
- Buclați tot numele fișierului, accesați și imprimați fiecare fișier ca în exemplul 2.1, consultați
getFileFromResourceAsStream()
.
Ieșire
Descarcă codul sursă
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Sintaxa și formatul unui URI
- Maven – Creați un fișier JAR
- Furnizor de sistem de fișiere Zip
- Exemple de fișiere Java.walk
- Java – Obțineți calea unui fișier JAR care rulează
mkyong
Fondator al Mkyong.com, iubesc Java și lucrurile open source. Urmăriți-l pe Twitter. Dacă vă plac tutorialele mele, vă recomandăm să faceți o donație pentru aceste organizații caritabile.