从android DocumentFile中有效地读取ZipFile

时间:2017-03-24 09:16:50

标签: java android

从外部存储中的Android设备读取文件。 我使用SAF获得了该文件的文档uri。 该文件恰好是一个zip文件,我在这里是一个我用来读取zip文件的片段:

private File readDataFromZip(Context context, String zipPath, String name, String ext) {
    ZipFile zipFile = null;
    try {
        if (ProjectApplication.getInstance().SAF_MODE) {
            UserModel userModel = UserQuery.getUserById(context, SharedPref.getCurrentUser(context));
            DocumentFile documentFile = DocumentFile.fromSingleUri(context, Uri.parse(SharedPref.getSAF(context, userModel, "data")));

            InputStream inputStream = context.getContentResolver().openInputStream(documentFile.getUri());
            ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(inputStream));
            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);
                    inputStream.close();
                    return file;
                }
            }
            inputStream.close();

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

    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

}

这很有效,除了在 SAF_MODE 上使用输入流时读取内容非常慢。

使用 DocumentFile

以更快的方式阅读zip文件

0 个答案:

没有答案