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
getResourcenon funziona nel file JAR. - Il
getResourceAsStreamfunziona 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
FileSystemse 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.