localiser un fichier dans un classpath
Je suis en train de lire dans le contenu du fichier, ex :
public void myMethod(){
FileInputStream fstream = new FileInputStream(fileLocation);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
....
....
.....
end while
end method
Et j'ai au début du corps de la classe private String fileLocation;
et à la fin du cours, j'ai un getter et setter. Maintenant, je vais essayer d'injecter ce fichier à l'emplacement de ressort à l'intérieur de haricots à partir de cette classe et je précise que l'init-méthode de cette classe. Mais j'obtiens l'erreur ne peut pas trouver le fichier spécifié que si ses pas sur un chemin de classe, mais il est à l'intérieur de la guerre de fichier? Je suis en train de construire le projet avec maven et j'ai mis le fichier dans src/main/resources
C'est l'erreur que je reçois lorsque j'essaie de lire le fichier :
D'erreur: src\main\resources\ids.txt
(Le système ne peut pas trouver le chemin d'accès
spécifié)
C'est quand j'ai essayé ceci :
FileInputStream fstream = new FileInputStream("src\\main\\resources\\ids.txt");
comment référencer correctement depuis le classpath?
MODIFIER
Quand j'ai modifier mon code selon @BalusC solution , voici à quoi il ressemble mais j'ai toujours null
erreur :
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("src/main/resources/ids.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(input));
String strLine;
while ((strLine = br.readLine()) != null) {
....
....
.....
end while
end method
source d'informationauteur Gandalf StormCrow
Vous devez vous connecter pour publier un commentaire.
La Java IO API s'appuie sur le disque local du système de fichiers, pas sur le chemin de la classe. En outre, utiliser des chemins relatifs dans Java IO choses est la recette pour la portabilité de la difficulté, ne comptez pas sur elle. D'allouer des ressources dans le classpath vous utilisez normalement
chargeur de classe#getResource()
ouchargeur de classe#getResourceAsStream()
.Cela dit, vous n'avez pas besoin que
DataInputStream
ligne. Vous êtes effectivement de ne pas prendre tout en bénéficier.Mise à jour: si cela ne fonctionne pas, alors soit le nom de la ressource est tout simplement pas valide ou si le fichier n'est pas réellement là, dans le classpath où vous l'attendez. Ma cents sur la
src
dossier est en fait le racine du classpath et ne fait pas partie d'un package. Retirer du nom.Mise à jour 2: pour obtenir tous les racine du système de fichier du disque chemins qui sont couverts par le moteur d'exécution classpath n':
Le nom de la ressource doit être par rapport à l'un ou l'autre. Qu'il est été placé dans
/WEB-INF/classes
lors de la compilation est normal. Il est couvert par le chemin de la classe. Votre problème est ailleurs. Êtes-vous sûr que le nom de la ressource est-elle correcte? Êtes-vous sûr que vous utilisez le code que vous pensez que vous êtes en cours d'exécution?