1、简介
Android 解压 SD卡 里的 zip 压缩的文件
2、代码结构
1)AndroidManifest.xml 文件 添加权限
2)MainActivity 功能实现
3、AndroidManifest.xml 添加 sd 卡读写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
4、MainActivity 文件
package com.example.tssh.myunzip;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
import java.util.zip.ZipInputStream;
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity: ";
private String zipPtath = "/storage/emulated/0/testunzip/test.zip";//压缩包路径
private String unzipPath = "/storage/emulated/0/testunzip/";//解压路径
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
unzipFile(zipPtath,unzipPath);
}
//解压函数
private void unzipFile(String zipPtath, String unzipPath) {
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
java.util.zip.ZipEntry zipEntry; //压缩条件条目
Log.i(TAG,"开始读压缩文件");
try {
FileInputStream fileInputStream = new FileInputStream(zipPtath);
CheckedInputStream checkedInputStream = new CheckedInputStream(fileInputStream,new CRC32());
ZipInputStream zipInputStream = new ZipInputStream(checkedInputStream);
bufferedInputStream = new BufferedInputStream(zipInputStream);
//遍历压缩包中的文件条目
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String entryName = zipEntry.getName();
Log.i(TAG,"entryName : " + entryName);
if (zipEntry.isDirectory()) {
File unzipDirPath = new File(unzipPath + "/" + entryName);
Log.i(TAG,"unzipDirPath: " + unzipDirPath);
if (!unzipDirPath.exists()) {
unzipDirPath.mkdirs();
Log.i(TAG,"创建文件夹");
}
} else {
Log.i(TAG,"正在创建解压文件:" + entryName);
bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream(unzipPath + "/" + entryName));
byte[] buffer = new byte[1024];
int readCount = bufferedInputStream.read(buffer);
while (readCount != -1) {
bufferedOutputStream.write(buffer,0,readCount);
readCount = bufferedInputStream.read(buffer);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if ( bufferedInputStream != null) {
bufferedInputStream.close();
}
if (bufferedOutputStream != null) {
bufferedOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//sd 卡权限动态申请
private void checkPermission() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if(requestCode == 100){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "");
}
}
}
}
5、效果查看
文献参考:
Android端解压zip文件(包含中文目录)
https://blog.csdn.net/bjst72636916yle/article/details/
Android解压sd卡里面Zip压缩文件
https://blog.csdn.net/bjstyle/article/details/72636916