Hay dos métodos comúnmente utilizados para cargar archivos de recursos:
1. Utilice ClassLoader En este punto, debo mencionar la clasificación de ClassLoader. Hay tres tipos principales de ClassLoader integrados en Java.
El primero es el cargador de clases raíz (cargador de clases de arranque), escrito en C++, que es responsable de cargar en la memoria algunas clases clave de Java, como java.lang.Object y otros códigos de tiempo de ejecución. El paquete responsable de la carga: BootStrp------>JRE/lib/rt.jar
El segundo es el cargador de clases extendido (ExtClassLoader), que está escrito por clases Java y es responsable de cargar algunas clases en JRE en la memoria. El paquete responsable de la carga: ExtClassLoader---------->JRE/lib/ext/*.jar
El tercer tipo es el cargador de clases de aplicación (AppClassLoader), o cargador de clases del sistema, que es responsable de cargar clases en CLASSPATH en la memoria. El cargador de clases de la aplicación se puede obtener a través de ClassLoader.getSystemClassLoader();
Hablemos de la herencia de los cargadores de clases. Los cargadores de clases no son una relación padre-hijo de herencia vertical, sino una relación combinada. Al crear una instancia de un cargador de clases, la instancia del cargador de clases padre se puede pasar al cargador de clases como una construcción. parámetro en el recipiente.
Para obtener información detallada sobre los cargadores de clases, puede buscarla usted mismo.
Después de obtener el cargador de clases de la aplicación, es hora de obtener el archivo de recursos. Llame a loader.getResource(path) para cargar el archivo de recursos en la ruta correspondiente. En cuanto a los recursos en el paquete, puede hacerlo. Trate el paquete como una carpeta normal, separe cada paquete con '/'.
Por ejemplo: URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser"); es para obtener el archivo de serialización nombres.ser en el paquete de demostración.
2. Utilice el método getResource de la clase actual que necesita cargarse para cargar. De hecho, este método también llama al cargador de clases que carga esta clase para obtener el archivo de recursos, pero los parámetros obtenidos son diferentes.
(1) Si desea obtener los archivos en el paquete donde se encuentra la clase, puede usar rutas relativas para acceder directamente a los recursos en el paquete, por ejemplo: Demo1.class.getResource("names.ser"); Lo que obtiene son los recursos en el paquete donde se encuentra el archivo de clase de Demo1.
(2) Para obtener archivos de recursos fuera del paquete, deben comenzar con '/', como URL url = Demo1.class.getResource("/demo/names.ser"); el paquete de demostración
De hecho, el segundo método es una encapsulación del primer método y ambos usan ClassLoader para cargar archivos de recursos. ¿Por qué dices eso? Si observa el código fuente de la clase Class, sabrá: