Classloader fournit deux méthodes pour obtenir des ressources à partir du chemin de classe chargé:
URL public getResource (nom de chaîne); public inputStream getResourceSstream (nom de chaîne);
Ici, le nom est le chemin de classe de la ressource, qui est relatif au chemin racine "/". GetResource obtient un objet URL pour localiser la ressource, et GetResourceSstream obtient la référence au flux d'entrée de ressource pour garantir que le programme peut extraire des données de l'emplacement correct.
Mais ce que nous utilisons vraiment ne sont pas les méthodes Classloader, mais les méthodes GetResource et GetResourceStream de la classe, car l'objet de classe peut être obtenu à partir de votre classe (comme YourClass.Class ou YourClass.getClass ()), et le Classloader doit encore appeler la méthode YourClass.getClassLoader (). Cependant, selon la documentation JDK, ces deux méthodes de l'objet de classe sont en fait "déléguées" au Classloader qui le charge, vous n'avez donc qu'à utiliser ces deux méthodes de l'objet de classe.
Par conséquent, appelez directement ce.getClass (). GetResourCeasStream (nom de chaîne) pour obtenir le flux et utilisez classloader.getSystemResourceSstream (nom de chaîne) dans la méthode statique.
Voici quelques façons d'obtenir le chemin de classe et le chemin absolu vers la classe actuelle. Vous devrez peut-être utiliser certaines de ces méthodes pour obtenir le chemin absolu vers les ressources dont vous avez besoin.
1.This.getClass (). GetResource ("")
Ce que vous obtenez, c'est le répertoire URI du fichier de classe actuel. Sans vous inclure!
Par exemple: fichier: / d: / workspace / jbpmtest3 / bin / com / test /
2.This.getClass (). GetResource ("/")
Ce que vous obtenez, c'est le chemin URI absolu du chemin de classe actuel.
Par exemple: fichier: / d: / workspace / jbpmtest3 / bin /
3.Te.GetClass () .getClassloader (). GetResource ("")
Ce que vous obtenez est également le chemin d'uri absolu du chemin de classe actuel.
Par exemple: fichier: / d: / workspace / jbpmtest3 / bin /
4.classloader.getSystemResource ("")
Ce que vous obtenez est également le chemin d'uri absolu du chemin de classe actuel.
Par exemple: fichier: / d: / workspace / jbpmtest3 / bin /
5.Thread.currentThread (). GetContextClassloader (). GetResource ("")
Ce que vous obtenez est également le chemin d'uri absolu du chemin de classe actuel.
Par exemple: fichier: / d: / workspace / jbpmtest3 / bin /
6.servletActionContext.getServletContext (). GetRealPath ("/")
Dans une application Web, obtenez le chemin d'accès absolu vers le répertoire racine de l'application Web. De cette façon, nous n'avons qu'à fournir un chemin par rapport au répertoire racine de l'application Web pour créer un chemin absolu pour localiser les ressources.
Par exemple: fichier: /d:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webproject
Note:
1. Essayez de ne pas utiliser le chemin relatif relatif par rapport à System.getProperty ("user.dir") répertoire utilisateur actuel. C'est une bombe à temps qui peut vous tuer à tout moment.
2. Essayez d'utiliser des ressources de chemin absolu sous la forme d'URI. Il peut être facilement converti en objets URI, URL, fichiers.
3. Essayez d'utiliser des chemins de classe relatifs. N'utilisez pas de chemins absolus. En utilisant la méthode publique Static URL GetExtendResource (String relativePath) de la classe CLASSOLODERUTIL ci-dessus, vous pouvez déjà localiser des ressources à tous les emplacements en utilisant le chemin relatif par rapport au CLASSPATH.
4. N'utilisez absolument pas de chemins absolus à code dur. Parce que nous pouvons utiliser la méthode getResource ("") de la classe Classloader pour obtenir le chemin absolu du chemin de classe actuel. Si vous devez spécifier un chemin absolu, utiliser les fichiers de configuration est également bien meilleur que le codé dur!
Comment obtenir un chemin en dehors de ClassPath:
URL Base = this.getClass (). GetResource (""); // Obtenez d'abord l'emplacement de cette classe, tel que / home / papeye / testjava / build / classes / net /
String path = new File (base.getFile (), "… /… /… /… /” + name) .getCanonicalPath (); // Vous pouvez obtenir / Accueil / Popeye / TestJava / Nom
De plus, si vous commencez le programme à partir d'ANT, le récupéré de ce.getClass (). GetResource ("" est assez étrange, et vous pouvez le déboguer avec succès avec la ligne de commande Java.
Jetons un coup d'œil à la méthode pour obtenir le chemin de classe de classe de classe à Java
J'ai dit beaucoup plus, donc je vous publierai directement le code clé. Le code spécifique est le suivant:
<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 (). GetContextClassloadher (). GetResource (""). GetPath (); 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>Ce qui précède est le code simple de la méthode pour obtenir le chemin de classe de classe de classe en Java présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, laissez-moi un message. L'éditeur vous répondra à temps!