Получить ресурс с помощью getResource()

Мне нужно получить файл изображения ресурса в проекте Java. Что я делаю:

URL url = TestGameTable.class.getClass().
          getClassLoader().getResource("unibo.lsb.res/dice.jpg");

Структура каталогов следующая:

unibo/
  lsb/
    res/
      dice.jpg
    test/
    ..../ /* other packages */

Дело в том, что я всегда получаю, как файл не существует. Я пробовал много разных путей, но я не мог решить проблему. Любой намек?


person lbedogni    schedule 07.04.2010    source источник


Ответы (4)


TestGameTable.class.getResource("/unibo/lsb/res/dice.jpg");
  • ведущая косая черта для обозначения корня пути к классам
  • косые черты вместо точек в пути
  • вы можете вызвать getResource() непосредственно в классе.
person Bozho    schedule 07.04.2010
comment
Просто имейте в виду, что Class#getResource и ClassLoader#getResource используют разные стратегии для сопоставления имени с местоположением. В примере LucaB на самом деле используется ClassLoader из Class‹java.lang.Class› (SomeClass.class.getClass()), но, вероятно, это ошибка, а не намеренно. - person jarnbjo; 07.04.2010
comment
@jambjo да, я подумал, что это ошибка. - person Bozho; 07.04.2010
comment
Это ошибка. Спасибо за подсказку - person lbedogni; 08.04.2010
comment
Я проверил это, но это вернуло ноль. Я написал так: MyClass.class.getResource("/WebContent/WEB-INF/xsd/MyXsd.xsd"). любая ошибка, которую я сделал? - person kamal; 07.06.2013

Вместо того, чтобы явно писать имя класса, вы можете использовать

this.getClass().getResource("/unibo/lsb/res/dice.jpg");
person arush436    schedule 29.04.2015
comment
Или просто getClass() без this. - person malana; 04.07.2015
comment
Это предполагает, что вы не находитесь в статическом контексте. - person flungo; 30.11.2016

если вы звоните из метода static, используйте:

TestGameTable.class.getClassLoader().getResource("dice.jpg");
person Binoy Babu    schedule 19.07.2015
comment
как насчет вызова другого, кроме статического метода? - person Enamul Hassan; 19.07.2015

Следует иметь в виду, что соответствующий путь здесь — это путь относительно местоположения вашего класса в файловой системе... в вашем случае TestGameTable.class. Это не связано с расположением файла TestGameTable.java.
Я оставил здесь более подробный ответ... где фактически находится ресурс

person J.E.Tkaczyk    schedule 21.01.2017
comment
Файл .class не обязательно хранится непосредственно в файловой системе. Он также может быть частью файла .jar... - person fabian; 07.05.2018
comment
Я заметил, что TestGameTable.class.getClassLoader().getResource("dice.jpg"); работает в упакованном приложении/банке, но getClass().getResource("/unibo/lsb/res/dice.jpg"); не работает. - person Jaja; 22.02.2021