「Java/サンプル/JavaでZipファイル解凍サンプル(commons-compress使用)」の編集履歴(バックアップ)一覧はこちら

Java/サンプル/JavaでZipファイル解凍サンプル(commons-compress使用)」(2013/01/29 (火) 02:49:33) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

* Java/サンプル/JavaでZipファイル解凍サンプル(commons-compress使用) - Javaには標準でZipの圧縮解凍が出来る機能がありますが、ファイル名をUTF-8として扱うため、Windowsで作成した日本語を含むファイルを正しく処理出来ません。 - なので、JavaでZipファイルを扱う場合は、Apacheプロジェクトのcommons compressを使うのが一般的だと思います。 * サンプルソース #highlight(java){{ // Zipファイル解凍サンプル // sample.zipの中身を書庫名のディレクトリを作ってその中に全て解凍するサンプルです。 import java.io.*; import java.util.*; import org.apache.commons.compress.archivers.zip.*; public class ZipKaitouSample { public static void main(String[] args) throws Exception { // 処理する書庫ファイル名「sample.zip」固定 String sampleZip = "sample.zip"; // ZipFileオープン // 文字コードはシステムデフォルトの文字コードにしておきます // Windows7だとMS932でした ZipFile zipFile = new ZipFile(sampleZip, System.getProperty("file.encoding")); // エントリ取得 Enumeration<? extends ZipArchiveEntry> entries = zipFile.getEntries(); byte[] b = new byte[500]; // 書庫名をベーズディレクトリにします String baseDir = sampleZip.substring(0, sampleZip.length() - 4); // エントリの数だけループ while (entries.hasMoreElements()) { // ZipArchiveEntryを取得 ZipArchiveEntry ze = entries.nextElement(); // ディレクトリは処理しません if (ze.isDirectory()) continue; // ベースディレクトリ+ZipArchiveEntry.getNameで出力パスを作ります File f = new File(baseDir + File.separator + ze.getName()); // 親ディレクトリを取得 File p = f.getParentFile(); // ディレクトリが存在しない場合、ディレクトリを作成します if (!p.exists()) { p.mkdirs(); } // エントリからInputStreamを取得 InputStream is = zipFile.getInputStream(ze); BufferedInputStream bis = new BufferedInputStream(is); // 出力用のファイルストリーム作成 FileOutputStream fo = new FileOutputStream(f); BufferedOutputStream bo = new BufferedOutputStream(fo); // InputStreamから読みだした分を順次ファイルに出力 int size = 0; while ((size = bis.read(b)) > 0) { bo.write(b, 0, size); } // クローズします bo.close(); // 処理したファイルを、ファイル名+圧縮ファイルサイズ+解凍ファイルサイズの形式で標準出力 System.out.printf("%s %,3d => %,3d\n", ze.getName(), ze.getCompressedSize(), ze.getSize()); } } } }} * サンプルダウンロード &ref(ZipKaitouSample.java) * コメント #pcomment(reply)
* Java/サンプル/JavaでZipファイル解凍サンプル(commons-compress使用) - Javaには標準でZipの圧縮解凍が出来る機能がありますが、ファイル名をUTF-8として扱うため、Windowsで作成した日本語を含むファイルを正しく処理出来ません。 - なので、JavaでZipファイルを扱う場合は、Apacheプロジェクトのcommons compressを使うのが一般的だと思います。 - commons compressは下記からダウンロード出来ます -- http://commons.apache.org/compress/ - 「commons-compress1.4.1-bin.zip」をダウンロードして、中に入っている「commons-compress-1.4.1.jar」を解凍し、クラスパスに追加すると使えるようになります。 * サンプルソース #highlight(java){{ // Zipファイル解凍サンプル // sample.zipの中身を書庫名のディレクトリを作ってその中に全て解凍するサンプルです。 import java.io.*; import java.util.*; import org.apache.commons.compress.archivers.zip.*; public class ZipKaitouSample { public static void main(String[] args) throws Exception { // 処理する書庫ファイル名「sample.zip」固定 String sampleZip = "sample.zip"; // ZipFileオープン // 文字コードはシステムデフォルトの文字コードにしておきます // Windows7だとMS932でした ZipFile zipFile = new ZipFile(sampleZip, System.getProperty("file.encoding")); // エントリ取得 Enumeration<? extends ZipArchiveEntry> entries = zipFile.getEntries(); byte[] b = new byte[500]; // 書庫名をベーズディレクトリにします String baseDir = sampleZip.substring(0, sampleZip.length() - 4); // エントリの数だけループ while (entries.hasMoreElements()) { // ZipArchiveEntryを取得 ZipArchiveEntry ze = entries.nextElement(); // ディレクトリは処理しません if (ze.isDirectory()) continue; // ベースディレクトリ+ZipArchiveEntry.getNameで出力パスを作ります File f = new File(baseDir + File.separator + ze.getName()); // 親ディレクトリを取得 File p = f.getParentFile(); // ディレクトリが存在しない場合、ディレクトリを作成します if (!p.exists()) { p.mkdirs(); } // エントリからInputStreamを取得 InputStream is = zipFile.getInputStream(ze); BufferedInputStream bis = new BufferedInputStream(is); // 出力用のファイルストリーム作成 FileOutputStream fo = new FileOutputStream(f); BufferedOutputStream bo = new BufferedOutputStream(fo); // InputStreamから読みだした分を順次ファイルに出力 int size = 0; while ((size = bis.read(b)) > 0) { bo.write(b, 0, size); } // クローズします bo.close(); // 処理したファイルを、ファイル名+圧縮ファイルサイズ+解凍ファイルサイズの形式で標準出力 System.out.printf("%s %,3d => %,3d\n", ze.getName(), ze.getCompressedSize(), ze.getSize()); } } } }} * サンプルダウンロード &ref(ZipKaitouSample.java) * コメント #pcomment(reply)

表示オプション

横に並べて表示:
変化行の前後のみ表示: