ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2014年7月27日日曜日

Java : Zip から複数ファイルを解凍して保存する


このエントリーをはてなブックマークに追加
  1. ZipInputStream を作る
  2. ZipInputStream.getNextEntry でエントリー(ファイル)を取得する
  3. ZipInputStream.read で中身を読み込む
  4. 読み込んだ中身を FileOutputStream に書き込む
  5. 2,3,4 の繰り返し
  6. ZipInputStream.close
以下、サンプルコード。Zip 内にディレクトリ構造がある事は想定していない、単純なコードにしています。
Android で外部ストレージ(SDカード)にエクスポートしたデータをアプリのディレクトリに戻すために使用したコードの一部。

try {
    // infilePath で zip ファイルが指定されているとする
    ZipInputStream zipInputStream =
            new ZipInputStream(new FileInputStream(infilePath));
    ZipEntry zipEntry;
    int len;
    byte[] buffer = new byte[1024];

    while((zipEntry = zipInputStream.getNextEntry()) != null){
        // outFolder で出力先のディレクトリが指定されているとする
        FileOutputStream fileOutputStream = new FileOutputStream(outFolder + "/" + zipEntry.getName());
        while ((len = zipInputStream.read(buffer)) > 0) {
            fileOutputStream.write(buffer, 0, len);
        }
        fileOutputStream.close();
    }
    zipInputStream.close();

} catch (Exception e) {
    // エラー処理
}

Java : 複数ファイルを Zip に圧縮して保存する


このエントリーをはてなブックマークに追加
  1. ZipOutputStream を作る
  2. zip に入れるファイル毎に ZipOutputStream.putNextEntry で ZipEntry を追加する
  3. ZipOutputStream.write を書き込む
  4. 2, 3 の繰り返し
  5. ZipOutputStream.close
Android でアプリのデータを外部ストレージ(SDカード等)にまとめてエクスポートするために使いました。 以下サンプルコード。
try {
    // String outfilePath で出力先のファイルパスが指定されているとする
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outfilePath));
    byte[] buffer = new byte[1024];
    int len;

    // 引数などで String[] files として zip に追加したいファイルのファイルパスが指定されているとする
    for(String file : files) {
        InputStream in = new FileInputStream(file);
        out.putNextEntry(new ZipEntry(file.getName())); // path名からファイル名だけにしておく
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        in.close();
        
    }
    out.close();

} catch(FileNotFoundException e){
    // エラー処理
} catch(Exception e){
    // エラー処理
}