Es gibt zwei häufig verwendete Methoden zum Laden von Ressourcendateien:
1. Verwenden Sie ClassLoader. An dieser Stelle muss ich die Klassifizierung von ClassLoader erwähnen. Es gibt drei Haupttypen von ClassLoader, die in Java integriert sind.
Der erste ist der in C++ geschriebene Root-Klassenlader (Bootstrap-Klassenlader), der für das Laden einiger wichtiger Java-Klassen wie java.lang.Object und anderer Laufzeitcodes in den Speicher verantwortlich ist. Das für das Laden verantwortliche Paket: BootStrp------>JRE/lib/rt.jar
Der zweite ist der erweiterte Klassenlader (ExtClassLoader), der von der Java-Klasse geschrieben wird und für das Laden einiger Klassen in der JRE in den Speicher verantwortlich ist. Das für das Laden verantwortliche Paket: ExtClassLoader---------->JRE/lib/ext/*.jar
Der dritte Typ ist der Anwendungsklassenlader (AppClassLoader) oder Systemklassenlader, der für das Laden von Klassen in CLASSPATH in den Speicher verantwortlich ist. Der Anwendungsklassenlader kann über ClassLoader.getSystemClassLoader() abgerufen werden;
Lassen Sie uns über die Vererbung von Klassenladern sprechen. Bei Klassenladern handelt es sich nicht um eine Eltern-Kind-Beziehung, sondern um eine Kombinationsbeziehung. Beim Instanziieren eines Klassenladers kann die Instanz des übergeordneten Klassenladers als Konstruktion übergeben werden Parameter im Gefäß.
Für detaillierte Informationen zu Klassenladern können Sie selbst suchen.
Nachdem Sie den Anwendungsklassenlader erhalten haben, ist es an der Zeit, die Ressourcendatei unter dem entsprechenden Pfad zu laden. Bezüglich der Ressourcen im Paket ist dies möglich Behandeln Sie das Paket wie einen gewöhnlichen Ordner und trennen Sie die einzelnen Pakete durch „/“.
Beispiel: URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser"); dient zum Abrufen der Namen.ser-Serialisierungsdatei im Demopaket.
2. Verwenden Sie zum Laden die getResource-Methode der aktuellen Klasse, die geladen werden muss. Tatsächlich ruft diese Methode auch den Klassenlader auf, der diese Klasse lädt, um die Ressourcendatei abzurufen, die erhaltenen Parameter sind jedoch unterschiedlich.
(1) Wenn Sie die Dateien im Paket abrufen möchten, in dem sich die Klasse befindet, können Sie relative Pfade verwenden, um direkt auf die Ressourcen im Paket zuzugreifen, zum Beispiel: Demo1.class.getResource("names.ser"); Sie erhalten die Ressourcen in dem Paket, in dem sich die Klassendatei von Demo1 befindet.
(2) Um Ressourcendateien außerhalb des Pakets zu erhalten, müssen sie mit „/“ beginnen, z. B. URL url = Demo1.class.getResource("/demo/names.ser"); das Demopaket
Tatsächlich ist die zweite Methode eine Kapselung der ersten Methode, und beide verwenden ClassLoader zum Laden von Ressourcendateien. Warum sagst du das? Wenn Sie sich den Quellcode der Class-Klasse ansehen, wissen Sie: