Android 解壓 Zip 壓縮檔案
阿新 • • 發佈:2018-11-30
文章目錄
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