Maison >Java >javaDidacticiel >Class.getResource() vs ClassLoader.getResource() : quelle est la principale différence dans le chargement des ressources ?
Différence entre Class.getResource() et ClassLoader.getResource()
Les deux Class.getResource() et ClassLoader.getResource() sont utilisé pour récupérer les ressources associées à une classe. Cependant, il existe une différence subtile dans leur comportement.
Class.getResource() accepte un nom de ressource qui peut être relatif ou absolu. Un nom de ressource relatif est interprété par rapport au package de la classe. D'un autre côté, ClassLoader.getResource() traite toujours les noms de ressources comme absolus.
Pour illustrer cette différence :
// Find the resource "xyz.txt" relative to the class's package String resource1 = foo.bar.Baz.class.getResource("xyz.txt").getPath(); // Find the resource "xyz.txt" absolutely String resource2 = foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt").getPath();
Dans ce cas, ressource1 fera référence au fichier "xyz. txt" dans le package "foo.bar", tandis que ressource2 fera référence au même fichier mais en utilisant un chemin absolu.
Mise en cache dans le répertoire Listes
Votre observation sur la mise en cache dans les listes d'annuaire est correcte. Les listes de répertoires sont mises en cache dans l'objet Class. Cela signifie que toute modification apportée à la structure des répertoires après le chargement de la classe ne sera pas reflétée lors de l'utilisation de Class.getResource().
Ce comportement est documenté sous la méthode « getResource » dans la documentation de l'API de classe :
Trouve une ressource avec un nom donné. Les règles de recherche des ressources associées à une classe donnée sont implémentées par le chargeur de classe définissant la classe. Cette méthode délègue au chargeur de classe de cet objet. Si cet objet a été chargé par le chargeur de classe bootstrap, la méthode délègue à ClassLoader.getSystemResource(java.lang.String).
Notes supplémentaires
Comme vous l'avez découvert, l'utilisation de ClassLoader.getResource() vous permettra d'accéder aux fichiers nouvellement créés. En effet, ClassLoader ne met pas en cache les listes de répertoires, il reflétera donc toujours l'état actuel du système de fichiers.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!