Java – Lire un fichier du dossier de ressources
En Java, nous pouvons utiliser getResourceAsStream
ou getResource
pour lire un fichier ou plusieurs fichiers à partir d’un dossier resources
ou à la racine du chemin de classe.
La méthode getResourceAsStream
renvoie un InputStream
.
Le getResource
renvoie un URL
et le convertit normalement en File
; Ne fonctionne pas dans le fichier JAR.
Fichiers dans le dossier resources
1.1 Passez en revue les fichiers dans le src/main/resources
, plus tard, nous accèderons aux fichiers et imprimer le contenu du fichier.
1.2 Par défaut, créez des outils comme Maven, Gradle ou une pratique Java courante copiera tous les fichiers de src/main/resources
vers la racine de target/classes
ou build/classes
. Ainsi, lorsque nous essayons de lire un fichier depuis src/main/resources
, nous lisons le fichier depuis la racine du chemin de classe du projet.
1.3 Voici une structure de fichier JAR. Habituellement, les fichiers du dossier resources
seront copiés à la racine du chemin de classe.
Récupérez un fichier dans le dossier des ressources.
2.1 L’exemple ci-dessous illustre l’utilisation de getResourceAsStream
et getResource
méthodes pour lire un fichier json/file1.json
dans le dossier resources
et imprimer le contenu du fichier.
Remarque
- La méthode
getResource
ne fonctionne pas dans le fichier JAR. - Le
getResourceAsStream
fonctionne partout.
Sortie
2.2 Maintenant, nous emballons le projet dans un fichier JAR et l’exécutons; cette fois, getResource
échouera et renvoie soit NoSuchFileException
soit InvalidPathException
. Nous ne pouvons pas lire les fichiers à l’intérieur du fichier JAR via l’URL de la ressource.
Exécutez le fichier JAR sous Linux (Ubuntu), il lance NoSuchFileException
.
Exécutez le fichier JAR sous Windows, il lance InvalidPathException
.
PS Ceci L’exemple utilise le plugin Maven maven-jar-plugin
pour créer le fichier JAR.
Obtenir un fichier du dossier resources – Test unitaire
3.1 Nous mettons les ressources de test dans le dossier src/test/resources
pour les tests unitaires. Habituellement, les fichiers des ressources de test seront copiés dans le dossier target/test-classes
.
3.2 Cela fonctionne de la même manière que nous lisons le fichier de src/main/resources
. Nous utilisons les mêmes méthodes getResourceAsStream
et getResource
pour lire le fichier à partir de src/test/resources
.
Sortie
Récupère tous les fichiers d’un dossier de ressources. (Environnement NON JAR)
Si nous ne connaissons pas le nom exact du fichier et que nous voulons lire tous les fichiers, y compris les fichiers de sous-dossier d’un dossier de ressources, nous pouvons utiliser le NIO Files.walk
pour accéder et lire facilement les fichiers.
4.1 L’exemple ci-dessous utilise Files.walk
pour lire tous les fichiers d’un dossier src/main/resources/json
:
Sortie
4.2 Cependant, la norme Files.walk
dans l’exemple 4.1 ne peut pas accéder directement aux fichiers du fichier JAR, essayez d’exécuter l’exemple 4.1 dans un environnement JAR, et il lance FileSystemNotFoundException
.
Récupère tous les fichiers d’un dossier de ressources. (Version JAR)
5.1 Cet exemple montre comment Files.walk
un dossier dans un fichier JAR via FileSystems
et URI jar:file:xxx.jar
.
L’idée est:
- Le fichier parcourt le dossier dans un fichier JAR en utilisant
FileSystems
, et récupérez tout le nom de fichier, voirgetPathsFromResourceJAR()
- Bouclez tout le nom de fichier, accédez et imprimez chaque fichier comme l’exemple 2.1, voir
getFileFromResourceAsStream()
.
Sortie
Télécharger le code source
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – Syntaxe et format d’un URI
- Maven – Créer un fichier JAR
- Zip File System Provider
- Exemples Java Files.walk
- Java – Récupérez le chemin d’un fichier JAR en cours d’exécution
mkyong
Fondateur de Mkyong.com, adore Java et les trucs open source. Suivez-le sur Twitter. Si vous aimez mes tutoriels, pensez à faire un don à ces associations caritatives.