Открыть файл из архива без временного извлечения
Сейчас я работаю над приложением для просмотра архива, которое позволяет пользователям перемещаться по содержимому архива, извлекать архивы и просматривать файлы внутри архива. я использую java.util.zip
API. Для предварительного просмотра файла я временно извлекаю его и открываю как обычный существующий файл. Как вы, возможно, понимаете, это не очень хороший подход, так как он не будет просматривать файлы, если недостаточно места для временного извлечения. Есть ли рабочее решение для прохождения ZipInputStream
для Activity
открыть его как файл? Есть ли другое решение этой проблемы? Заранее спасибо.
1 ответ
В принципе, вы могли бы создать ContentProvider
это служит ZipInputStream
,
В этом примере проекта я демонстрирую, как создать ContentProvider
поддержки openFile()
который использует трубу, созданную ParcelFileDescriptor.createPipe()
подать файл. createPipe()
возвращает пару (двухэлементный массив) ParcelFileDescriptors
представляя концы трубы. Вы используете второй элемент из массива для записи через OutputStream
; openFile()
возвращает первый элемент из массива, который должен быть передан Android вызывающему процессу. Звонящий будет использовать openInputStream()
читать то, что вы передаете по трубе.
В моем случае я отправляю актив, по которому я получаю InputStream
с помощью AssetManager
, В вашем случае вы бы использовали ZipInputStream
,
Обратите внимание, что в моем примере проекта предполагается, что он выполняется на устройстве с программой просмотра PDF, поскольку он обслуживает PDF из ресурсов и пытается открыть его с помощью startActivity()
,