Путь к файлу getResourceAsStream во время работы .jar

Мой код:

BufferedInputStream bis =
  new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3"));

Этот код отлично работает, когда файл playerhit.mp3 находится в том же пакете, что и в MP3.class, в котором он запущен. Я запускаю это как .jar. Если, хотя я меняю путь к файлу на что-то вроде /src/data/audio/playerhit.mp3, он больше не работает. Есть ли в любом случае доступ к другому пути к файлу, чем root из пакета, при запуске как .jar?

Ответ 1

Взгляните на Javadoc для getResourceAsStream(...).

Если аргумент начинается с /, то абсолютное имя ресурса - это часть имени, следующего за /. В противном случае абсолютное имя имеет следующий вид: modified_package_name/name Где modified_package_name - это имя пакета этого объекта с /, замененным на ..

Итак, если ваш playerhit.mp3 находится в корне вашей структуры пакета, вы должны ссылаться на него как /playerhit.mp3. Если он находится в /src/data/audio/, вы, вероятно, должны использовать /data/audio/playerhit.mp3 - но проверьте содержимое вашего JAR файла.

Ответ 2

Сначала проверьте, действительно ли файл находится в банке.

Проверьте местоположение внутри банки.

Относительный путь: текущий пакет

Абсолютный путь: корень jar