Mon projet a la structure suivante:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
J'ai un fichier dans /src/test/resources/test.csv
et je veux charger le fichier à partir d'un test unitaire dans/src/test/java/MyTest.java
J'ai ce code qui n'a pas fonctionné. Il se plaint "Aucun fichier ou répertoire de ce type".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
J'ai aussi essayé
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Cela ne fonctionne pas non plus. Il revient null
. J'utilise Maven pour construire mon projet.
this.getClass().getResource("/test.csv")
Réponses:
Essayez le suivant:
Si ce qui précède ne fonctionne pas, divers projets ont été ajoutés à la classe suivante: 1 (code ici ). 2
ClassLoaderUtil
Voici quelques exemples d'utilisation de cette classe:
Remarques
la source
Object.class.getClassLoader();
, à partir d'un contexte statique qui ne fonctionnait pas - cette suggestion fait - enfin presque, elle injecte%20
pour les espaces qui me donneFileNotFoundException
Essayer:
IIRC
getResourceAsStream()
par défaut est relatif au package de la classe.Comme l'a noté @Terran, n'oubliez pas d'ajouter le
/
au début du nom de fichierla source
String
stackoverflow.com/a/35446009/544045Voici une solution rapide avec l'utilisation de la goyave :
Usage:
la source
Essayez les codes fluides sur le projet Spring
Ou sur un projet non printanier
la source
Projet non printanier:
Pour les projets Spring, vous pouvez également utiliser un code de ligne pour obtenir n'importe quel fichier dans le dossier de ressources:
la source
Maintenant, j'illustre le code source pour lire une police à partir du répertoire de ressources créé par maven,
Cela a fonctionné pour moi et j'espère que le code source entier vous aidera également, profitez-en!
la source
Pour java après 1.7
la source
Si vous utilisez ClassLoader contextuel pour trouver une ressource, cela coûtera certainement les performances de l'application.
la source
Importez les éléments suivants:
La méthode suivante renvoie un fichier dans une ArrayList of Strings:
la source
J'ai fait face au même problème .
Le fichier n'a pas été trouvé par un chargeur de classe, ce qui signifie qu'il n'a pas été compressé dans l'artefact (jar). Vous devez construire le projet . Par exemple, avec maven:
Ainsi, les fichiers que vous avez ajoutés au dossier de ressources entreront dans la construction maven et deviendront disponibles pour l'application.
Je voudrais garder ma réponse: elle n'explique pas comment lire un fichier (d'autres réponses l'expliquent), elle répond pourquoi
InputStream
ouresource
était nulle . Une réponse similaire est ici .la source
getResource () fonctionnait bien avec les fichiers de ressources placés
src/main/resources
uniquement. Pour obtenir un fichier qui se trouve sur le chemin autre quesrc/main/resources
dire,src/test/java
vous devez le créer exlicitement.l'exemple suivant peut vous aider
la source
Le code fonctionne-t-il lorsque vous n'exécutez pas le pot Maven-build, par exemple lors de l'exécution à partir de votre IDE? Si c'est le cas, assurez-vous que le fichier est réellement inclus dans le bocal. Le dossier des ressources doit être inclus dans le fichier pom, dans
<build><resources>
.la source
La classe suivante peut être utilisée pour charger un
resource
depuis leclasspath
et recevoir également un message d'erreur approprié en cas de problème avec le donnéfilePath
.la source
J'ai résolu ce problème en ajoutant un
/scr/main/resources
dossier à monJava Build Path
la source
Je l'ai fait fonctionner à la fois sur le pot en cours d'exécution et dans l'IDE en écrivant comme
la source
la source
Vous pouvez utiliser com.google.common.io.Resources.getResource pour lire l'url du fichier, puis obtenir le contenu du fichier à l'aide de java.nio.file.Files pour lire le contenu du fichier.
la source
Je le fais fonctionner sans aucune référence à "class" ou "ClassLoader".
Disons que nous avons trois scénarios avec l'emplacement du fichier 'example.file' et votre répertoire de travail (où votre application s'exécute) est home / mydocuments / program / projects / myapp:
a) Un sous-dossier descendant vers le répertoire de travail: myapp / res / files / example.file
b) Un sous-dossier non descendant vers le répertoire de travail: projets / fichiers / exemple.fichier
b2) Un autre sous-dossier non descendant du répertoire de travail: programme / fichiers / exemple.fichier
c) Un dossier racine: home / mydocuments / files / example.file (Linux; sous Windows remplacez home / par C :)
1) Obtenez le bon chemin: a)
String path = "res/files/example.file";
b)String path = "../projects/files/example.file"
b2)String path = "../../program/files/example.file"
c)String path = "/home/mydocuments/files/example.file"
Fondamentalement, s'il s'agit d'un dossier racine, démarrez le nom du chemin avec une barre oblique. S'il s'agit d'un sous-dossier, aucune barre oblique ne doit précéder le nom du chemin. Si le sous-dossier n'est pas descendant vers le répertoire de travail, vous devez y accéder en utilisant "../". Cela indique au système de remonter d'un dossier.
2) Créez un objet File en passant le bon chemin:
3) Vous êtes maintenant prêt à partir:
la source