Существует два часто используемых метода загрузки файлов ресурсов:
1. Используйте ClassLoader. На этом этапе я должен упомянуть классификацию ClassLoader. В Java встроено три основных типа ClassLoader.
Первый — это корневой загрузчик классов (загрузчик классов начальной загрузки), написанный на C++, который отвечает за загрузку в память некоторых ключевых классов Java, таких как java.lang.Object и других кодов времени выполнения. Пакет, отвечающий за загрузку: BootStrp------>JRE/lib/rt.jar
Второй — расширенный загрузчик классов (ExtClassLoader), который написан классом Java и отвечает за загрузку некоторых классов из JRE в память. Пакет, отвечающий за загрузку: ExtClassLoader---------->JRE/lib/ext/*.jar
Третий тип — это загрузчик классов приложения (AppClassLoader), или загрузчик системных классов, который отвечает за загрузку классов из CLASSPATH в память. Загрузчик классов приложения можно получить с помощью ClassLoader.getSystemClassLoader();
Давайте поговорим о наследовании загрузчиков классов. Загрузчики классов — это не отношения «родитель-потомок» вертикального наследования, а комбинированные отношения. При создании экземпляра загрузчика классов экземпляр родительского загрузчика классов может быть передан загрузчику классов как конструкция. параметр в сосуде.
Подробную информацию о загрузчиках классов вы можете поискать самостоятельно.
После получения загрузчика классов приложения пришло время получить файл ресурсов. Вызовите loader.getResource(path), чтобы загрузить файл ресурсов по соответствующему пути. Он не может начинаться с '/'. Что касается ресурсов в пакете, вы можете. относитесь к пакету как к обычной папке, отделяя каждый пакет знаком «/».
Например: URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser"); предназначен для получения файла сериализации Names.ser в демонстрационном пакете.
2. Для загрузки используйте метод getResource текущего класса, который необходимо загрузить. Фактически этот метод также вызывает загрузчик классов, который загружает этот класс для получения файла ресурсов, но получаемые параметры другие.
(1) Если вы хотите получить файлы в пакете, в котором находится класс, вы можете использовать относительные пути для прямого доступа к ресурсам в пакете, например: Demo1.class.getResource("names.ser"); вы получаете ресурсы в пакете, в котором находится файл класса Demo1.
(2) Чтобы получить файлы ресурсов вне пакета, они должны начинаться с '/', например URL url = Demo1.class.getResource("/demo/names.ser"); демонстрационный пакет
Фактически второй метод является инкапсуляцией первого метода, и оба используют ClassLoader для загрузки файлов ресурсов. Почему ты так говоришь? Если вы посмотрите исходный код класса Class, вы узнаете: