Java – class.getResource возвращает null

Я использую следующее, чтобы получить URL этого конкретного файла, но он возвращает null. Есть ли у кого-нибудь какие-либо предложения относительно проблемы или альтернативный способ сделать это?

URL url = ExchangeInterceptor.class.getResource("GeoIP.dat"); 

Для тех, кто использует Intellij Idea : проверьте настройки -> Компилятор -> Шаблоны ресурсов .

Этот параметр содержит все расширения, которые должны интерпретироваться как ресурсы. Если расширение не соответствует ни одному шаблону здесь, class.getResource будет возвращать null для ресурсов, используя это расширение.

Путь относится к корню classpath, и если вы не даете абсолютный путь, он ищет тот же пакет, что и class, который вы используете (в данном случае ExchangeInterceptor ). Чтобы найти что-то в корне, используйте /GeoIP.dat .

Используйте метод getResource classа ClassLoader

 URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat"); 

Я решил эту проблему, указав resource root на IDEA.

Первоначально каталог был таким, и значок был значком простой папки

До

введите описание изображения здесь

Right click по каталогу (или просто по имени проекта) -> Mark directory As -> Resource Root .

После

после

Перекомпилируйте и радуйтесь: P

Нет, это правильный путь афайк. Убедитесь, что ресурс находится в вашем пути к classам. Это часто является причиной этих проблем.

Если вы используете Gradle и IntelliJ, а изменение Resource patterns не работает, а корни ресурсов правильно установлены … вы можете попробовать следующее:

введите описание изображения здесь

Settings > Build, Execution, Delpoyment > Build Tools > Gradle > Runner > Delegate IDE build/run actions to gradle . (IntelliJ 2017.3.3)

Источник: https://youtrack.jetbrains.com/issue/IDEA-176738#comment=27-2518612

На всякий случай у кого-то еще есть проблемы, чтобы понять это:

.getResource () предоставляет вам доступ к локальной папке bin. Это означает, что ваши ресурсы должны быть расположены в вашем проекте / bin / package /. Корневая папка – это YourProject / bin /, и ее можно добавить, добавив префикс / в аргумент String, как сказал iirekm.

Где вы разместили этот файл GeoIP.dat? В том же пакете, что и ExchangeInterceptor, или в пакете «root». Если в том же пакете ваш код в порядке, если в корневом – добавьте префикс ‘/’.

Может быть, вы используете M2Eclipse? При неправильной настройке это может также привести к таким проблемам. Другой причиной таких проблем могут быть: неправильно сконфигурированные загрузчики classов, неправильно сконфигурированные OSGi, …

Файл должен находиться в пути к classам, например: –

бен / мой / пакет / GeoIP.dat

Префикс кажется ложью. Следующее будет работать.

 URL url = ExchangeInterceptor.class.getResource("my/package/GeoIP.dat"); 

Я подозреваю, что проблема в том, что у вас нет файла в пути к classам.

При использовании IntelliJ я сгенерировал проект как приложение JavaFX, а затем добавил его поддержку фреймворка maven. Оказывается, я тогда поместил свой ресурс в src/main/resources и должен был добавить ./ за каждым именем ресурса, использующим их в коде.

Также, как указано в предыдущем ответе, работала загрузка только ресурса classLoader.

Поэтому для меня окончательная загрузка URL-адресов была выполнена с использованием:

URL url = getClass().getClassLoader().getResource(String.format(".%ssample.fxml", File.separatorChar));

File.separatorChar возвращает / on * nix и \ на windows.

Я столкнулся с подобной проблемой. Из Java SE API для getResource (имя строки) :

Если имя начинается с ‘/’ (‘\ u002f’), то абсолютное имя ресурса является частью имени, следующего за ‘/’.

Поэтому я добавил '/' перед моим каталогом: MyClass.class.getResource("/dir_name/") .

В вашем случае попробуйте добавить '/' перед именем вашего файла:

URL url = ExchangeInterceptor.class.getResource("/GeoIP.dat");

Во-первых, вам нужно убедиться, что вы обращаетесь к правильному файлу по правильному пути. Вы можете проверить это с помощью getClass (). GetResource (“GeoIP.dat”). GetAbsolutePath ().

Во-вторых, спецификатор пути чувствителен к регистру, поэтому убедитесь, что ваш файл не назван «geoIP.dat» или «GeoIP.DAT».

В случае затмения .

Просто намек. Ваш код может быть правильным, но ваша конфигурация jre отсутствует. Я столкнулся с той же ошибкой, ничего не помогло, пока я не проверил настройки затмения.

Убедитесь, что вы правильно установили среду исполнения.

 Preferences -> Java -> Installed JREs -> use "jdk..." as compatible JRE 
  • URL: Имя пользователя с @
  • Каков правильный способ кодирования URL-символов Unicode?
  • Как кодировать значения параметров URI?
  • Предпочтительный способ Java для отправки URL-адреса HTTP для доступности
  • Регулярное выражение для поиска URL-адресов внутри строки
  • .NET. Получить протокол, хост и порт.
  • Разбор строк запроса на Android
  • Передача параметра через службу отчетов URL-адресов в sql-сервер
  • URL без «http | https»
  • Как получить доступ к ресурсам в JAR-файле?
  • Разбор JSON из URL
  • Interesting Posts

    Как найти и удалить несколько записей реестра Windows?

    Разница между df -k и du -sh

    Ширина диалогового windows Android

    Получение «файла не обнаружено» в заголовке Bridging при импорте инфраструктур Objective-C в проект Swift

    Что такое эллипсис (…) для этой сигнатуры метода?

    В Mac OS X как я могу контролировать, что использует мое интернет-соединение?

    Невозможно переименовать файл в Windows 7

    Запрос даты с ISODate в mongodb, похоже, не работает

    Java Enum getDeclaringClass vs getClass

    Как реализовать автоматическое использование с помощью нового API AnalyzerInfixSuggester от Lucene?

    Почему в IPv6-адресе есть знак процента «%»?

    Как удалить дублированный «призрачный» сетевой диск на OS X?

    Что конкретно представляют опасности eval (parse (…))?

    mysql после триггера вставки, который обновляет столбец другой таблицы

    Какими вещами я должен работать ежедневно, еженедельно, ежемесячно на своей машине с Windows?

    Давайте будем гением компьютера.