1. 程式人生 > >Android 解壓 Zip 壓縮檔案

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