Java – Leggi un file dalla cartella delle risorse
In Java, possiamo usare getResourceAsStream
o getResource
per leggere uno o più file da una resources
cartella o root del classpath.
Il metodo getResourceAsStream
restituisce un InputStream
.
Il getResource
restituisce un URL
e normalmente lo converte in un File
; Non funziona nel file JAR.
File nella cartella delle risorse
1.1 Rivedi i file in src/main/resources
, successivamente accediamo ai file e stampare il contenuto del file.
1.2 Per impostazione predefinita, crea strumenti come Maven, Gradle oppure la pratica Java comune copierà tutti i file da src/main/resources
alla radice di target/classes
o build/classes
. Quindi, quando proviamo a leggere un file da src/main/resources
, leggiamo il file dalla radice del classpath del progetto.
1.3 Di seguito è riportata una struttura di file JAR. Di solito, i file nella cartella resources
verranno copiati nella radice del classpath.
Ottieni un file dalla cartella delle risorse.
2.1 L’esempio seguente mostra l’uso di getResourceAsStream
e getResource
metodi per leggere un file json/file1.json
dalla cartella resources
e stampare il contenuto del file.
Nota
- Il metodo
getResource
non funziona nel file JAR. - Il
getResourceAsStream
funziona ovunque.
Output
2.2 Ora comprimiamo il progetto in un file JAR e lo eseguiamo; questa volta, getResource
non funzionerà e restituirà NoSuchFileException
o InvalidPathException
. Non possiamo leggere i file all’interno del file JAR tramite l’URL della risorsa.
Esegui il file JAR su Linux (Ubuntu), genera NoSuchFileException
.
Esegui il file JAR su Windows, genera InvalidPathException
.
PS This l’esempio utilizza il plug-in Maven maven-jar-plugin
per creare il file JAR.
Ottieni un file dalla cartella delle risorse – Unit Test
3.1 Mettiamo le risorse di test nella cartella src/test/resources
per gli unit test. Di solito, i file nelle risorse di test vengono copiati nella cartella target/test-classes
.
3.2 Funziona allo stesso modo leggiamo il file da src/main/resources
. Utilizziamo gli stessi metodi getResourceAsStream
e getResource
per leggere il file da src/test/resources
.
Output
Recupera tutti i file da una cartella di risorse. (Ambiente NON JAR)
Se non conosciamo il nome esatto del file e vogliamo leggere tutti i file, inclusi i file delle sottocartelle da una cartella delle risorse, possiamo utilizzare NIO Files.walk
per accedere e leggere facilmente i file.
4.1 L’esempio seguente utilizza Files.walk
per leggere tutti i file da una cartella src/main/resources/json
:
Output
4.2 Tuttavia, lo standard Files.walk
nell’esempio 4.1 non può accedere direttamente ai file nel file JAR, prova a eseguire l’esempio 4.1 in un ambiente JAR e genera FileSystemNotFoundException
.
Scarica tutti i file da una cartella di risorse. (Versione JAR)
5.1 Questo esempio mostra come Files.walk
una cartella all’interno di un file JAR tramite FileSystems
e URI jar:file:xxx.jar
.
L’idea è:
- File percorre la cartella all’interno di un file JAR utilizzando
FileSystems
e ottieni tutto il nome del file, vedigetPathsFromResourceJAR()
- Ripeti tutto il nome del file, accedi e stampa ogni file come nell’esempio 2.1, vedi
getFileFromResourceAsStream()
.
Output
Scarica codice sorgente
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Sintassi e formato di un URI
- Maven – Crea file JAR
- Zip File System Provider
- Esempi Java Files.walk
- Java – Ottieni il percorso di un file JAR in esecuzione
mkyong
Fondatore di Mkyong.com, ama Java e le cose open source. Seguitelo su Twitter. Se ti piacciono i miei tutorial, valuta la possibilità di fare una donazione a questi enti di beneficenza.