Разархивируйте ZIP-файл на SD-карте в приложении Android

У меня есть защищенный паролем защищенный паролем видеофайл, сохраненный на SD-карте на эмуляторе Android. Теперь я хочу разархивировать этот видеофайл на SD-карте через код. Как я могу это достичь? Любая помощь или код? заранее спасибо

import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * * @author jon */ public class Decompress { private String _zipFile; private String _location; public Decompress(String zipFile, String location) { _zipFile = zipFile; _location = location; _dirChecker(""); } public void unzip() { try { FileInputStream fin = new FileInputStream(_zipFile); ZipInputStream zin = new ZipInputStream(fin); ZipEntry ze = null; while ((ze = zin.getNextEntry()) != null) { Log.v("Decompress", "Unzipping " + ze.getName()); if(ze.isDirectory()) { _dirChecker(ze.getName()); } else { FileOutputStream fout = new FileOutputStream(_location + ze.getName()); for (int c = zin.read(); c != -1; c = zin.read()) { fout.write(c); } zin.closeEntry(); fout.close(); } } zin.close(); } catch(Exception e) { Log.e("Decompress", "unzip", e); } } private void _dirChecker(String dir) { File f = new File(_location + dir); if(!f.isDirectory()) { f.mkdirs(); } } } 

В твоем случае::

 String zipFilename = Environment.getExternalStorageDirectory() + "/files.zip"; String unzipLocation = Environment.getExternalStorageDirectory() + "/unzipped/"; Decompress d = new Decompress(zipFilename, unzipLocation); d.unzip(); 

Чтобы распаковать защищенный паролем файл, используйте эту библиотеку:

http://www.lingala.net/zip4j/download.php

Это так просто.

 ZipFile zipFile = new ZipFile(YourZipFile); if(zipFile.isEncrypted()) zipFile.setPassword(Password); zipFile.extractAll(Destination); 

Это немного более чистая версия кода Самира с использованием IOUtils.copy() Apache для копирования файлов и, finally блокировки. Если у вас большие файлы в архиве, лучше используйте IOUtils.copyLarge() .

 import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ZipUtils { public static void unzip(InputStream is, File path) { checkDir(path); ZipInputStream zis = null; FileOutputStream fos = null; try { zis = new ZipInputStream(is); ZipEntry ze; while ((ze = zis.getNextEntry()) != null) { File entryFile = new File(path, ze.getName()); if (ze.isDirectory()) { checkDir(entryFile); } else { fos = new FileOutputStream(entryFile); IOUtils.copy(zis, fos); fos.close(); fos = null; } zis.closeEntry(); } } catch (IOException e) { e.printStackTrace(); } finally { if (zis != null) { try { zis.close(); } catch (IOException ignore) { } } if (fos != null) { try { fos.close(); } catch (IOException ignore) { } } } } private static void checkDir(File path) { if (!path.exists()) { path.mkdirs(); } else if (!path.isDirectory()) { throw new IllegalArgumentException("Path is not directory"); } } } 
Intereting Posts