2011-10-08 16 views
16

Androidのエミュレータでsdカードに保存されたビデオファイルをzip形式のパスワードで保護しました。今私はコードを介してSDカード上のビデオファイルを解凍したい。どうすればそれを達成できますか?ヘルプやコードはありますか?お使いの場合には、事前Androidアプリケーションのsdカードに圧縮されたファイルを解凍

+0

http://www.google.com/search?q=android+unzip+file – Caner

+0

のAndroid開発者サイトからZipInputStreamを見てください:http://developer.android.com/reference/java /util/zip/ZipFile.html – Seph

+1

この質問は以前に何度も聞かれました。これはAndroidのライブラリではなく、Javaライブラリにあります。こちらをご覧ください:http://stackoverflow.com/questions/3382996/how-to-unzip-files-programmatically-in-android – HXCaine

答えて

21
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(); 
+0

このページは「ページが存在しません」と表示されています –

+2

Divyesh返信ありがとうございます。しかし、私のzipファイルはパスワードで保護されているので、私はそのファイルに入力するパスワードをどのように一致させるのでしょうか? –

+13

あなたの答えを補うだけで、実際のエントリの読み込みとファイルの書き込みは、バイト単位ではなく、より高いパフォーマンスのためにまとめることができます: 'byte [] buffer = new byte [4096]; for(int c = zin.read(buffer); c!= -1; c = zin.read(buffer)){ fout.write(buffer、0、c); } ' – nobre

2

これは少しApacheのIOUtils.copy()ファイルのコピーのためにと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"); 
     } 
    } 
} 
5

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

それはとても簡単です。

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