有时候发布app,在assets中会自带一些压缩包,打开应用解压放在用户手机sd卡中,
解压这一块就是下面的代码,要判断解压出来的是直接的文件还是一个文件夹,并存储到指定路径下面就好
public
class
UnzipAssets {
/**
|
* 解压Assets中的文件
|
* @param context上下文对象
|
* @param assetName压缩包文件名
|
* @param outputDirectory输出目录
|
* @throws IOException
|
*/ |
public
static void
unZip(Context context, String assetName,String outputDirectory) throws
IOException { |
//创建解压目标目录
|
File file =
new File(outputDirectory);
|
//如果目标目录不存在,则创建
|
if
(!file.exists()) { |
file.mkdirs();
|
}
|
InputStream inputStream =
null ; |
//打开压缩文件
|
inputStream = context.getAssets().open(assetName);
|
ZipInputStream zipInputStream =
new ZipInputStream(inputStream);
|
//读取一个进入点
|
ZipEntry zipEntry = zipInputStream.getNextEntry();
|
//使用1Mbuffer
|
byte [] buffer =
new byte [ 1024
* 1024 ];
|
//解压时字节计数
|
int
count = 0 ;
|
//如果进入点为空说明已经遍历完所有压缩包中文件和目录
|
while
(zipEntry != null ) {
|
//如果是一个目录
|
if
(zipEntry.isDirectory()) { |
//String name = zipEntry.getName();
|
//name = name.substring(0, name.length() - 1);
|
file =
new File(outputDirectory + File.separator + zipEntry.getName());
|
file.mkdir();
|
}
else { |
//如果是文件
|
file =
new File(outputDirectory + File.separator
|
+ zipEntry.getName());
|
//创建该文件
|
file.createNewFile();
|
FileOutputStream fileOutputStream =
new FileOutputStream(file);
|
while
((count = zipInputStream.read(buffer)) > 0 ) {
|
fileOutputStream.write(buffer,
0 , count); |
}
|
fileOutputStream.close();
|
}
|
//定位到下一个文件入口
|
zipEntry = zipInputStream.getNextEntry();
|
}
|
zipInputStream.close();
|
}
|
}