2014-01-11 108 views
1

我不想从android assets目录复制这么多文件到我的应用程序的内部存储的开销。这就是为什么我在assets文件夹中创建了一个zip文件,我会将该zip文件复制到我的android应用程序的内部存储器中。复制后,我会提取/解压它在相同的位置和提取完成后,我将删除此zip文件。提取应用内部存储中的Zip文件 - Android?

这个想法是消除复制这么多文件的开销。同时复制这么多的文件,我得到IOException与一些文件类型。这又是一个障碍。这就是为什么我正在尝试这样做,因为我已经在上面讨论过了。 但问题是,我怎样才能提取驻留在我的应用程序的内部存储的zip文件。我想在同一位置提取它(应用程序的内部存储)。我怎样才能做到这一点?

任何帮助或代码表示赞赏.. !!!

+2

http://stackoverflow.com/questions/7485114/如何对拉链和解压最文件。检查它是否有帮助 – Raghunandan

+0

看起来像一个坏主意。你为什么要把东西保存为zip,最终你的应用程序可能会占用比所需空间多一倍的空间。 –

+1

其实我会在解压缩后删除这个zip文件。我不希望用户下载解压缩的大数据到Android设备。 – Master

回答

1

你可以从这个source提取使用此代码zip文件:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 

import android.util.Log; 

public class UnzipUtil 
{ 
    private String zipFile; 
    private String location; 

    public UnzipUtil(String zipFile, String location) 
    { 
     this.zipFile = zipFile; 
     this.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()); 

        byte[] buffer = new byte[8192]; 
        int len; 
        while ((len = zin.read(buffer)) != -1) 
        { 
         fout.write(buffer, 0, len); 
        } 
        fout.close(); 

        zin.closeEntry(); 

       } 

      } 
      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(); 
     } 
    } 
} 

写入外部存储权限在AndroidManifest.xml

+0

我已经在使用这段代码。 – Master

+0

有什么问题? –

相关问题