从外部存储中的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文件