2011-08-09 8 views
4

非常に大きなzipアーカイブから1つのファイル(私の名前は分かっています)を取得しようとしています。このアーカイブには約100000個のファイルが含まれています。なぜなら、私のファイルをループで見つけたくないからです。私はこのケースのための解決策でなければならないと思います。Linux上のコマンドのようなものです。私は、コード複数のファイルを含む.zipファイルから1つのファイルをアンドロイドで解凍する

try { 
    FileInputStream fin = new FileInputStream(rootDir+"/archive.zip"); 
    ZipInputStream zin = new ZipInputStream(fin); 
    ZipEntry ze = new ZipEntry("myfile.txt"); 

    FileOutputStream fout = new FileOutputStream(rootDir+"/buff/" + 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); 
} 

このコードは次のように書いた

unzip archive.zip myfile.txt 

はバフディレクトリに新しいファイルを作成しますが、このファイルは空です! このトラブルを手伝ってください!

ありがとうございました!

答えて

3

私はJavaについてはかなり新しくなっていますが、APIドキュメントには、java.util.zipを含め、標準のJavaライブラリに関するかなりの量の情報が含まれています。そこからZipFile Entryに行くと、メソッドリストにスクロールしてgetEntryというメソッドを見つけることができます。これはあなたが始めるべきルートと思われます!

EDIT:あなたはおそらくディレクトリを含める必要があります念頭にクマ(例:「DIR \ subdirF \ subdirW \ FileThatYouWant.txt」)というファイルがある方法であると思われるため、電話をかけるときあなたが1つずつ進むときに名前が付けられます。

EDIT 2:かなりの情報がここにあります:Compressing and Decompressing Data Using Java APIs、少し読んでよろしいですか? メモリの制約のため、ZipInputStreamオブジェクトを使用するのが妥当な唯一の解決策ですが、AFAIKはアーカイブ内の各ZipEntryを実行する必要があります(平均50,000?)が、ファイル全体を読み込む必要はありませんメモリに保存する。性能に関しては、このニッチ機能の現在の実装と同じくらい効率的であると私は推測しました。

+0

申し訳ありませんが、解決策ではありません。 ZipFile開始読み込みホールファイルのように見えますが、それは非常に大きく、メモリ不足エラーがあります。 – lubart

+0

アーカイブをロードせずに大きなアーカイブから圧縮ファイルを抽出できるようにしたいですか?デバイス上またはインターネット上のアーカイブはどこかにありますか?私はこれが不可能な仕事のように聞こえ始めているのではないかと心配しますが、もう少し情報を提供してください。 –

+0

あなたの答えをありがとう。このファイルはsdcardにあります。はい、私はすべてのzipファイルの読み込みなしでアーカイブから1つのファイルを抽出したいと思います。私はそれがunzipコマンドでLinux上で可能であることを知っていて、それがAndroidでも可能であるという希望を持っています... – lubart

関連する問題