从存档打开文件而不进行临时提取

时间:2012-10-12 16:54:06

标签: java android file zip

现在我正在开发一个存档浏览应用程序,它允许用户浏览存档内容,提取存档并预览存档中的文件。我正在使用java.util.zip API。要预览文件,我暂时将其解压缩并将其作为通常的现有文件打开。您可能已经理解,这不是一个好方法,因为如果没有足够的空间来进行临时提取,它将不会预览文件。是否有将ZipInputStream传递给Activity以将其作为文件打开的工作解决方案?这个问题还有另一种解决方法吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

原则上,您可以创建一个ContentProvider来提供ZipInputStream

this sample project中,我演示了如何创建ContentProvider支持openFile(),使用ParcelFileDescriptor.createPipe()创建的管道来提供文件。 createPipe()返回表示管道末端的ParcelFileDescriptors对(双元素数组)。您使用数组中的第二个元素通过OutputStream写入; openFile()返回数组中要传递给调用进程的第一个元素。调用者将使用openInputStream()读取您通过管道传输的内容。

在我的情况下,我发送的资产是通过InputStream获得AssetManager的。在您的情况下,您将使用ZipInputStream

请注意,我的示例项目假设它正在具有PDF查看器的设备上运行,因为它正在从资源中提供PDF并尝试通过startActivity()打开它。