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
getResourcene fonctionne pas dans le fichier JAR. - Le
getResourceAsStreamfonctionne 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.