2012-07-23 17 views
12

ZipInputStreamを使用してAndroidアセットフォルダにあるZIPファイルからファイルを読み取っています:それは動作しますが、それはgetNextEntry() 、かなりのファイルがあります。AndroidアセットフォルダのZIPファイルからファイルを読み取る

私はZIPファイルをSDカードにコピーすると、ZipFile.getEntryを使用すると読み込みが非常に高速ですが、アセットファイルにZipFileを使用する方法が見つかりませんでした。

アセットフォルダのZIPにすばやくアクセスする方法はありますか?または、私は実際にZIPをSDカードにコピーする必要がありますか?

(これは私がこれをやっている理由を誰もが知っている場合は、アプリが50 MBを超えているため、Playストアで取得するには拡張APKを使用する必要があります。 Amazon App Storeに入れると、Amazonは拡張APKを自然にサポートしていないので、別のバージョンを使用する必要があります...私は、2つの異なる場所でZIPファイルにアクセスすることは、しかし、悲しいかな...あなたは次のようにZipInputStreamを作成することができます)

答えて

2

ZipInputStream zipIs = new ZipInputStream(context.getResources().openRawResource(your.package.com.R.raw.filename)); 
ZipEntry ze = null; 

     while ((ze = zipIs.getNextEntry()) != null) { 

      FileOutputStream fout = new FileOutputStream(FOLDER_NAME +"/"+ ze.getName()); 

      byte[] buffer = new byte[1024]; 
      int length = 0; 

      while ((length = zipIs.read(buffer))>0) { 
      fout.write(buffer, 0, length); 
      } 
      zipIs .closeEntry(); 
      fout.close(); 
     } 
     zipIs .close(); 
+0

おかげで、私はすでに 'ZipInputStream'を使用し、私が書いたように、しかし' getNextEntry() 'だけの方法が遅すぎるを使用してZIPに求めて! – hdort

+0

ファイルをバッファで読み取っていますか?コードを例として提供しました。私のためにかなりうまく動作します。 – Slickelito

+1

zipファイルの中で正しいファイルを探しているのは、抽出が遅くないことです。 'ZipInputStream'に' ZipFile.getEntry(filename) 'のようなものがありますか? – hdort

2

をあなたは解凍すなわち(資産に直接圧縮されていないファイルを保存することができますアセット/フォルダにジップ)。この方法では、ファイルに直接アクセスすることができ、APKを構築すると、ファイルは圧縮されます。

4

これが私の作品:

private void loadzip(String folder, InputStream inputStream) throws IOException 
{ 
    ZipInputStream zipIs = new ZipInputStream(inputStream); 
    ZipEntry ze = null; 

      while ((ze = zipIs.getNextEntry()) != null) { 

       FileOutputStream fout = new FileOutputStream(folder +"/"+ ze.getName()); 

       byte[] buffer = new byte[1024]; 
       int length = 0; 

       while ((length = zipIs.read(buffer))>0) { 
       fout.write(buffer, 0, length); 
       } 
       zipIs.closeEntry(); 
       fout.close(); 
      } 
      zipIs.close(); 
} 
関連する問題