Подтвердить что ты не робот

Ресурс classpath в банке

У меня есть проект A, содержащий некоторые java файлы и ресурс classpath R.txt. В рамках проекта я использую ClassLoader.getSystemResource( "R.txt" ); для извлечения R.txt.

Тогда у меня есть проект B, который включает jar файл проекта A. Теперь getSystemResource ( "R.txt" ) не найдет текстовый файл (и да, он все еще находится в корневом файле jar). Даже попытка "/R.txt", как было предложено на каком-то другом сайте, не работала. Есть идеи?

4b9b3361

Ответ 1

Используйте getResource вместо getSystemResource для использования ресурса, специфичного для данного загрузчика классов, а не для системы. Например, попробуйте выполнить одно из следующих действий:

URL resource = getClass().getClassLoader().getResource("R.txt");
URL resource = Foo.class.getClassLoader().getResource("R.txt");
URL resource = getClass().getResource("/R.txt");
URL resource = Foo.class.getResource("/R.txt");

Обратите внимание на косую черту при вызове Class.getResource вместо ClassLoader.getResource; Class.getResource относится к пакету, содержащему класс, если у вас нет ведущей косой черты, тогда как ClassLoader.getResource всегда является абсолютным.

Ответ 2

По-видимому, ваш JAR не загружается системным загрузчиком классов, поэтому getSystemResource() не может работать. Это должно работать:

ClassFromProjectA.class.getClassLoader().getResource("R.txt")

IMO более удобно размещать ресурсы внутри того же пакета, что и классы, которые их используют, поэтому вы можете использовать более короткие

ClassFromProjectA.class.getResource("R.txt")

(или внутри этого класса просто getClass().getResource("R.txt"))

Ответ 3

Работает ли ClassLoader.getResource()? На данный момент вы просто указываете, что должен использоваться системный загрузчик классов.