本案例情景为android读取assets(或res/raw)下的一个zip压缩文件,并读出其中的数据,但并非是压缩SD卡中。
献给伸手党的福音,直接上代码:
public void unZip() throws IOException
{
//通过assets读取
// InputStream inputStream = getAssets().open("aaa.zip");
//通过raw资源文件读取
InputStream inputStream = getResources().openRawResource(R.raw.aaa);
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
// 读取一个进入点
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null)
{
String name = zipEntry.getName();
StringBuffer sb = new StringBuffer("");
byte[] buffer = new byte[1024];
int count = 0;
while ((count = zipInputStream.read(buffer)) > 0)
{
String str = new String(buffer);
str = str.trim();
sb.append(str);
}
String value = sb.toString();
map.put(name,value);
// 定位到下一个文件入口
zipEntry = zipInputStream.getNextEntry();
}
zipInputStream.close();
}
各位非伸手党,估计能看到这里了,咱们现在可以来看看这段代码,查过各种代码的朋友们看着上面的代码肯定很眼熟,是的,和其他解压缩代码几乎一样,而不同的是对读入流采用了不同的操作。
zip的操作基本流程: zip——》inputstream——》file(解压缩 流程)
zip——》inputstream——》String或其他定义数据格式 (数据转存或处理)。
有人可能会考虑解压缩的效率,我这里解压一个zip包有43个文件(比较小),平均耗时50ms,效率还是很可观的。