在android的应用中,虽然不会经常遇到想要的各种压缩文件进行解压的事情,但是在某些特定的情况下,还是会遇到需要进行压缩包解压的问题。
那么现在就用一个很简单并且本有效果的方法进行对ZipEntry进行封装了。很简单主要就是文件的写入写出的操作。
public class ZipHelper {
public void doZip(String ZIP_PATH,String FOLDER_PATH) {
try{
//获取压缩文件的输入流
ZipInputStream inZip =new ZipInputStream(new FileInputStream(ZIP_PATH));
ZipEntry zipEntry;
String szName ="";
//创建压缩文件的解压位置
File parentfolder =new File(FOLDER_PATH);
//判断文件是否存在,如果不存在报错
if(!parentfolder.exists()) {
Log.e("文件不存在",mkdir "+ FOLDER_PATH +" result "+ parentfolder.mkdirs());
}
//进行压缩文件的解压
while((zipEntry = inZip.getNextEntry()) !=null) {
szName = zipEntry.getName();
//判断解压文件是否是个文件夹
if(zipEntry.isDirectory()) {
szName = szName.substring(0, szName.length() -1);
File folder =new File(FOLDER_PATH + File.separator+ szName);
Log.e("文件不存在","mkdir "+ folder.getAbsolutePath() +" result "+ folder.mkdirs());
}else{
File f =new File(FOLDER_PATH + File.separator+ szName);
int endSep=f.getAbsolutePath().lastIndexOf('/');
File folder=new File(f.getAbsolutePath().substring(0,endSep));
if(!folder.exists())
Log.e("文件不存在","mkdir "+ folder.getAbsolutePath() +" result "+ folder.mkdirs());
if(!f.exists()) {
Log.e("文件不存在","create new file "+ f.getAbsolutePath());
f.createNewFile();
}
//进行文件写入写出的方法
pipe(inZip,new FileOutputStream(f),false);
}
}
inZip.close();
}catch(Exception e) {
StackHelper.printStack(e);
}
}
//进行文件写入写出的具体操作
private void pipe(InputStream in, OutputStream out,boolean closeIn) throws IOException {
byte[] buffer =new byte[2048];
int len =0;
while((len = in.read(buffer)) != -1) {
out.write(buffer,0, len);
}
if(closeIn)
in.close();
out.close();
}
}