Il existe deux méthodes couramment utilisées pour charger des fichiers de ressources :
1. Utilisez ClassLoader À ce stade, je dois mentionner la classification de ClassLoader. Il existe trois principaux types de ClassLoader intégrés à Java.
Le premier est le chargeur de classe racine (chargeur de classe bootstrap), écrit en C++, qui est responsable du chargement de certaines classes Java clés, telles que java.lang.Object et d'autres codes d'exécution en mémoire. Le package responsable du chargement : BootStrp------>JRE/lib/rt.jar
Le second est le chargeur de classe étendu (ExtClassLoader), qui est écrit par la classe Java et est responsable du chargement de certaines classes du JRE en mémoire. Le package responsable du chargement : ExtClassLoader--------->JRE/lib/ext/*.jar
Le troisième type est le chargeur de classe d'application (AppClassLoader), ou chargeur de classe système, qui est responsable du chargement des classes de CLASSPATH en mémoire. Le chargeur de classe d'application peut être obtenu via ClassLoader.getSystemClassLoader();
Parlons de l'héritage des chargeurs de classe. Les chargeurs de classe ne sont pas une relation parent-enfant d'héritage vertical, mais une relation combinée lors de l'instanciation d'un chargeur de classe, l'instance du chargeur de classe parent peut être transmise au chargeur de classe en tant que construction. paramètre dans le navire.
Pour des informations détaillées sur les chargeurs de classes, vous pouvez effectuer une recherche vous-même.
Après avoir obtenu le chargeur de classe d'application, il est temps d'obtenir le fichier de ressources. Appelez loader.getResource(path) pour charger le fichier de ressources sous le chemin correspondant. Il ne peut pas commencer par '/'. Concernant les ressources du package, vous pouvez. traitez le package comme un dossier ordinaire, séparez chaque package par '/'.
Par exemple : URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser"); permet d'obtenir le fichier de sérialisation names.ser dans le package de démonstration.
2. Utilisez la méthode getResource de la classe actuelle qui doit être chargée pour charger. En fait, cette méthode appelle également le chargeur de classe qui charge cette classe pour obtenir le fichier de ressources, mais les paramètres obtenus sont différents.
(1) Si vous souhaitez obtenir les fichiers du package où se trouve la classe, vous pouvez utiliser des chemins relatifs pour accéder directement aux ressources du package : Demo1.class.getResource("names.ser"); vous obtenez les ressources du package où se trouve le fichier de classe de Demo1.
(2) Pour obtenir des fichiers de ressources en dehors du package, ils doivent commencer par '/', tel que URL url = Demo1.class.getResource("/demo/names.ser"); ce qui est obtenu est le fichier names.ser dans le package de démonstration
En fait, la deuxième méthode est une encapsulation de la première méthode et toutes deux utilisent ClassLoader pour charger les fichiers de ressources. Pourquoi tu dis ça ? Si vous regardez le code source de la classe Class, vous saurez :