У меня есть папка / пакет ресурсов в корне моего проекта, я не хочу загружать определенный файл. Если бы я хотел загрузить определенный файл, я бы использовал class.getResourceAsStream, и я был бы в порядке !! Что я на самом деле хочу сделать, так это загрузить «Папку» в папке ресурсов, зациклить файлы внутри этой папки, получить поток для каждого файла и прочитать содержимое ... Предположим, что имена файлов не определены до времени выполнения ... Что я должен делать? Есть ли способ получить список файлов внутри папки в вашем файле jar? Обратите внимание, что файл Jar с ресурсами - это тот же файл JAR, из которого выполняется код ...
Заранее спасибо...
Ответы:
Наконец я нашел решение:
Второй блок просто работает, когда вы запускаете приложение в IDE (не с файлом JAR). Вы можете удалить его, если вам это не нравится.
источник
Попробуйте следующее.
Сделайте путь к ресурсу,
"<PathRelativeToThisClassFile>/<ResourceDirectory>"
например, если ваш путь к классу - com.abc.package.MyClass, а ваши файлы ресурсов находятся в src / com / abc / package / resources /:Вы также можете использовать
источник
File
классом. Этот код не работает с ресурсами внутри файла JAR. Период.Я знаю, что это много лет назад. Но только для других людей попадается эта тема. Что вы можете сделать, это использовать
getResourceAsStream()
метод с путем к каталогу, и входной поток будет иметь все имена файлов из этого каталога. После этого вы можете объединить путь dir с каждым именем файла и вызвать getResourceAsStream для каждого файла в цикле.источник
У меня была такая же проблема, когда я пытался загрузить некоторые конфигурации hadoop из ресурсов, упакованных в jar ... как в IDE, так и в jar (версия для выпуска).
Я обнаружил,
java.nio.file.DirectoryStream
что лучше всего перебирать содержимое каталога как в локальной файловой системе, так и в jar.источник
Следующий код возвращает искомую «папку» как путь, независимо от того, находится она внутри фляги или нет.
Требуется Java 7+.
источник
folder
), по-видимому, игнорируется при создании файловой системы. ПоэтомуgetPath
не возвращаетсяfolder/path/to/...
, а толькоpath/to/...
.Другое решение, вы можете сделать это, используя
ResourceLoader
это:источник
Просто ... используйте OSGi. В OSGi вы можете перебирать записи вашего Bundle с помощью findEntries и findPaths.
источник
Внутри моего jar-файла была папка Upload, в этой папке было три других текстовых файла, и мне нужно было иметь точно такую же папку и файлы за пределами jar-файла, я использовал код ниже:
источник
Как указывают другие ответы, когда ресурсы находятся внутри jar-файла, все становится действительно безобразным. В нашем случае это решение:
https://stackoverflow.com/a/13227570/516188
работает очень хорошо в тестах (поскольку при запуске тестов код не упаковывается в файл jar), но не работает, когда приложение действительно работает нормально. Итак, что я сделал ... Я жестко закодировал список файлов в приложении, но у меня есть тест, который считывает фактический список с диска (может сделать это, так как это работает в тестах) и дает сбой, если реальный список не не соответствует списку, который возвращает приложение.
Таким образом, у меня есть простой код в моем приложении (без трюков), и я уверен, что не забыл добавить новую запись в список благодаря тесту.
источник
Эта ссылка говорит вам, как.
Волшебство - это метод getResourceAsStream ():
источник