Android 解压 Zip 压缩文件

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

猜你喜欢

转载自blog.csdn.net/qq_27061049/article/details/84637701
今日推荐