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
getResourcenu funcționează în fișierul JAR. -
getResourceAsStreammetoda 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.