English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ClassLoader fournit deux méthodes pour obtenir des ressources à partir du chemin de classepath chargé :
public URL getResource(String name); public InputStream getResourceAsStream(String name);
Ici, name est le chemin de la ressource, qui est relatif à "/La position sous le chemin racine. getResource retourne un objet URL pour localiser la ressource, tandis que getResourceAsStream obtient une référence au flux de la ressource pour garantir que le programme peut extraire les données à partir de la bonne position.
Cependant, les méthodes réellement utilisées ne sont pas les deux méthodes de ClassLoader, mais les méthodes getResource et getResourceAsStream de Class, car l'objet Class peut être obtenu à partir de votre classe (comme YourClass.class ou YourClass.getClass()), tandis que ClassLoader nécessite une autre appel de la méthode YourClass.getClassLoader(), bien que selon les documents JDK, les deux méthodes de l'objet Class sont en fait 'déléguées' (delegate) à la ClassLoader qui le charge, donc il suffit d'utiliser les deux méthodes de l'objet Class.
Par conséquent, utilisez directement this.getClass().getResourceAsStream(String name) pour obtenir le flux, et dans les méthodes statiques, utilisez ClassLoader.getSystemResourceAsStream(String name) ; .
Voici quelques méthodes pour obtenir l'URI absolu du chemin de classepath et de l'objet courant. Vous pourriez devoir utiliser l'une de ces méthodes pour obtenir l'URI absolu de la ressource nécessaire.
1.this.getClass().getResource("")
L'URI du répertoire du fichier class de l'objet courant n'inclut pas lui-même !
Par exemple : file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource(""/"
L'URI absolu du chemin de classe actuel est obtenu.
Par exemple : file:/D:/workspace/jbpmtest3/bin/
3.this.getClass().getClassLoader().getResource("")
Cela donne également le chemin absolu URI du ClassPath actuel .
Par exemple : file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource("")
Cela donne également le chemin absolu URI du ClassPath actuel .
Par exemple : file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader().getResource("")
Cela donne également le chemin absolu URI du ClassPath actuel .
Par exemple : file:/D:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext().getRealPath(“/)
Dans une application Web, obtenir le chemin absolu du répertoire racine de l'application Web. De cette manière, nous n'avons besoin que de fournir un chemin relatif par rapport au répertoire racine de l'application Web pour construire le chemin absolu de localisation des ressources.
Par exemple : file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
Points à retenir :
1.Ne pas utiliser des chemins relatifs par rapport au répertoire actuel de l'utilisateur via System.getProperty("user.dir"). C'est une bombe à retardement qui peut vous tuer à tout moment.
2.Utilisez plutôt des ressources de chemins absolus sous forme d'URI. Elle peut facilement être transformée en URI, URL, objet File.
3.Utilisez plutôt des chemins relatifs par rapport au classpath. Ne pas utiliser des chemins absolus. L'utilisation de la méthode public static URL getExtendResource(String relativePath)de la classe ClassLoaderUtil permet déjà d'utiliser des chemins relatifs par rapport au classpath pour localiser toutes les ressources.
4.Ne jamais utiliser des chemins absolus codés en dur. Car, nous pouvons parfaitement utiliser la méthode getResource("")de la classe ClassLoader pour obtenir le chemin absolu du classpath actuel. Si vous devez absolument spécifier un chemin absolu, utiliser un fichier de configuration est beaucoup mieux que de le coder en dur !
Méthode pour obtenir des chemins en dehors du CLASSPATH :
URL base = this.getClass().getResource(""); //d'abord obtenir la position de cette classe, par exemple/home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //vous pouvez obtenir/home/popeye/testjava/
De plus, si vous démarrez le programme à partir d'ANT, this.getClass().getResource(
Voyons maintenant les méthodes de récupération du classpath dans Java
Il n'y a pas besoin de dire trop de futilités, je vais directement coller le code clé, comme suit :
<span style="font-size: 18px;"> System.out.println("++++++++++++++++++++++++"); String path = System.getProperty("java.class.path"); String path2 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getPath(); String path3 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getFile(); String path4 = Thread.currentThread().getContextClassLoader().getResource(" System.out.println("path 1 = " + path); System.out.println("path 2 = " + path2); System.out.println("path 3 = " + path3); System.out.println("path 4 = " + path4); System.out.println("++++++++++++++++++++++++"); </span>
Les méthodes de récupération du classpath dans Java présentées ci-dessus par l'éditeur sont des codes simples, j'espère qu'ils vous seront utiles. Si vous avez des questions, n'hésitez pas à me laisser un message, je répondrai à temps !
Déclaration : Le contenu de cet article est extrait du réseau, la propriété intellectuelle appartient à ses auteurs respectifs, le contenu est contribué et téléchargé par les utilisateurs d'Internet, ce site Web ne détient pas de propriété, n'a pas été traité par l'éditeur humain et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de copyright, vous êtes invités à envoyer un e-mail à : notice#w3Déclaration : Le contenu de cet article est extrait du réseau, la propriété intellectuelle appartient à ses auteurs respectifs, le contenu est contribué et téléchargé par les utilisateurs d'Internet, ce site Web ne détient pas de propriété, n'a pas été traité par l'éditeur humain et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de copyright, vous êtes invités à envoyer un e-mail à : notice#w