使用android DocumentFile读取ZipFile

问题描述 投票:5回答:1

我想用Android java.util.zip.ZipFileDocumentFile读取一个zip文件,>

插图:

[使用Storage Access Framework,我在android系统中获取文件的uri并使用它创建一个Documentfile。该文档文件是一个包含zip文件“ data.zip”的文件夹]

Data.zip具有80多个条目,包括文本文件和媒体文件(> = 8mb <= 20mb)。因此,zip文件超过932mb。

有了filePAth,我可以直接使用下面的代码段阅读条目:

zipFile = new ZipFile(zipPath);
                ZipEntry zipEntry = zipFile.getEntry(name);
                if (zipEntry != null) {
                    return writeByteArraysToFile(ByteStreams.toByteArray(zipFile.getInputStream(zipEntry)), ext);
                }

这在不需要存储访问框架的设备上效果很好。

对于使用SAF的设备,我正在使用DocumentFile,并且已经阅读了这样的内容:

InputStream inputStream = context.getContentResolver().openInputStream(documentFile.getUri());

                BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
                ZipInputStream zipInputStream = new ZipInputStream(bufferedInputStream);
                ZipEntry entry;
                while ((entry = zipInputStream.getNextEntry()) != null) {

                    Log.e("field", entry.getName());
                    if (entry.getName().contains(name)) {
                        File file = PBUtils.writeByteArraysToFile(ByteStreams.toByteArray(zipInputStream), ext);
                        zipInputStream.closeEntry();
                        inputStream.close();
                        zipInputStream.close();
                        bufferedInputStream.close();
                        return file;
                    }
                    zipInputStream.closeEntry();
                }
                inputStream.close();

这不起作用,但这是问题所在:

  1. 在遍历条目以查找特定条目时,它很慢。我调试并找出读取媒体条目所花费的时间,这会导致延迟。
  2. 我需要有关如何使其更快地实现的解决方案,并且需要知道是否可以将ZipFile与DocumentFile一起使用,以便至少可以执行以下操作:

zipFile = new ZipFile(documentFileUri);
                ZipEntry zipEntry = zipFile.getEntry(name);
                if (zipEntry != null) {
                    return writeByteArraysToFile(ByteStreams.toByteArray(zipFile.getInputStream(zipEntry)), ext);
                }

[我想使用带有Android DocumentFile的java.util.zip.ZipFile读取一个zip文件插图:使用Storage Access Framework,我在android系统中获取了文件的uri并创建了一个Documentfile ...

javascript android
1个回答
0
投票
这真是个无耻的发现-Google强迫我们提供不需要的Scope Storage,但没有提供在需要时使用它的手段。一种方法:
© www.soinside.com 2019 - 2024. All rights reserved.