Сводка:
У меня есть программа, которую я хочу отправить в виде отдельного файла jar
.
Это зависит от трех больших файлов ресурсов (по 700 МБ каждый)в двоичном формате.К содержимому файла можно легко получить доступ посредством индексации, поэтому мой анализатор считывает эти файлы как RandomAccessFile
-объекты.
Поэтому моя цель - получить доступ к файлам ресурсов из jar
через File
объекты.
Моя проблема:
При доступе к файлам ресурсов из моей файловой системы проблем нет, но я собираюсь упаковать их в файл jar
программы,таким образом, пользователю не нужно обрабатывать эти файлы самим.
Единственный способ, которым я до сих пор нашел доступ к файлу, упакованному в jar
, - это InputStream
(сгенерированный class.getResourceAsStream()
), которыйсовершенно бесполезен для моего приложения, поскольку чтение этих файлов от начала до конца будет слишком медленным, вместо использования RandomAccessFile
.
Копирование содержимого файла в файл, чтение и удаление его во время выполнения не вариантeigher по той же причине.
Может ли кто-нибудь подтвердить, что нет никакого способа достичь моей цели или предложить решение (или подсказку, чтобы я мог ее решить самостоятельно)?
Что я нашел до сих пор:
Я нашел этот ответ, и, если я понимаю ответ, он говорит, что решить мою проблему невозможно:
Ресурсы в файле .jar не являются файламив том смысле, что ОС может обращаться к ним напрямую через обычные API доступа к файлам.
И, поскольку java.io.File представляет именно такой файл (то есть вещь, похожую на файл в ОС), онне может использоваться для ссылки на что-либо в файле .jar.
Возможный обходной путь - извлечь ресурс во временный файл и сослаться на него с помощью файла.
Я думаю, что могу понять причины этого, но сейчас мне уже более восьми лет, и хотя я не очень образован, когда дело доходит до файловых систем и архивов, я знаю, что с тех пор язык Java довольно сильно эволюционировал, так что, возможно, естьэто надежда?:)
Вероятно, бесполезная справочная информация:
Файлы представляют собой геномы в формате 2bit
, и я использую TwoBitParser
из biojava
через класс оболочкиTwoBitFacade
?.Javadocs
можно найти здесь и здесь .