Comment getClassLoader().getResourceAsStream() fonctionne en java
Je google comment code ci-dessous charges de la ressource
Abc.classe.getClassLoader().getResourceAsStream("abc.txt")
et vous trouvez qu'il recherche la ressource dans tous les fichier jar et le fichier zip dans le chemin de classe.
Mais quand je l'ai essayé je ne suis pas en mesure de le charge, mais si j'ai donner le chemin d'accès au package puis je suis en mesure de la charge
quelqu'un peut-il me dire comment getResourceAsStream recherche le chemin de classe
Grâce
un scénario est :-
Mon code ci-dessous est un programme simple et mon fichier de ressources abc.txt est à l'intérieur de com.abc paquet. quand j'ai spécifié le chemin d'accès de paquet, il a travaillé et quand je n'ai pas il ne fonctionne pas.
package com.abc;
public class ResourceExp {
public static void main(String args[])
{
new ResourceExp().getResource();
}
public void getResource()
{
String name = "abc.txt";
//worked
System.out.println(ResourceExp.class.getClassLoader().getResourceAsStream("com/abc/"+name));
//not workded
//System.out.println(ResourceExp.class.getClassLoader().getResourceAsStream(name));
}
}
si getResourceAsStream regarde la ressource dans tous les jar fichier et de répertoire, alors pourquoi je spécifier le chemin d'accès au package
OriginalL'auteur yoga | 2014-11-26
Vous devez vous connecter pour publier un commentaire.
C'est correct lorsque vous ne travaillez qu'avec un seul chargeur de classe (la plupart des non-OSGi/non-environnements modulaires). Tout le contenu de tous les Bocaux peuvent être considérés comme un grand arbre, où les classes et les ressources des Jarres, qui se produisent avant dans le chemin de classe, gagner plus de ceux des JARRES, qui se produisent encore plus de retard.
recherches à la racine de l'arbre tandis que:
recherches par rapport à l'ensemble de la chaîne Abc.
recherches à la racine de l'arbre à nouveau.
Tous ces methode seulement de rechercher dans le répertoire spécifié (ou le répertoire racine) et de ne pas traverser et de recherche de l'ensemble de l'arbre.
Personnellement, j'ai l'habitude de toujours utiliser les deux dernières versions (
Class.getResourceAsStream
) et n'utilisent que rarement lesClassLoader.getResourceAsStream
méthode directement.et quel est le sens de (la plupart des non-OSGi/ non-environnements modulaires)
1. Il va chercher dans tous les pots qui fournissent le répertoire spécifié. Si vous êtes à la recherche d'un fichier dans le répertoire racine, puis il va chercher dans le répertoire racine (mais seulement le répertoire racine) de tous les Pots.
Module systèmes tels que OSGi ou NetBeans Système de Module de fournir un chargeur de classe pour chaque module/ module (c'est à dire en POT).
OriginalL'auteur Puce
Par exemple, vous pouvez faire un "ressources" le dossier source, de placer des fichiers, puis utilisez
Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.txt");
J'utilise toujours cette méthode.
OriginalL'auteur Lorenzo Notaro