Java ZIP 解凍する方法 ディレクトリ指定 - ZipEntry・ZipFile
JavaでZipEntryとZipFileを使ってZIPファイルを解凍する方法です。
実務ではZIP 解凍したい方法として「特定のディレクトリに解凍したい」などの要望があるかと思います。これを実現するサンプルを用意しました。
ここでは JavaでZipEntryとZipFileを使ってZIPファイルを解凍する方法 を紹介します。
Sponsored Links
サンプルソース
それでは、実際のソースを見ながら解説してきます。今回は、ZipUnCompressUtils
というクラスを用意しました。
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * <p><strong>ZipUnCompressUtils</strong>は、 ZIP 解凍をおこなう上で利便性の高い機能を提供します。</p> * * @author Sakakibara Engineering Office. * @version $Revision: 1.0 $ $Date: 2013.11.07 $ $Description: 新規作成 $ */ public class ZipUnCompressUtils { /** * 指定された ZIP ファイルを、指定されたパスに、ファイル名のディレクトリを作成して解凍します。 <br> * * @param zipFileFullPath ZIP ファイルのフルパス * @param unzipPath 解凍するパス * @return 処理結果 true:解凍成功 false:解凍失敗 */ public static boolean unzip( String zipFileFullPath, String unzipPath ) { File baseFile = new File(zipFileFullPath); File baseDir = new File(baseFile.getParent(), baseFile.getName().substring(0, baseFile.getName().lastIndexOf("."))); if ( !baseDir.mkdir() ) System.out.println("Couldn't create directory because directory with the same name exists.: " + baseDir); ZipFile zipFile = null; try { // ZIPファイルオブジェクト作成 zipFile = new ZipFile(zipFileFullPath); // ZIPファイル内のファイルを列挙 Enumeration<? extends ZipEntry> enumZip = zipFile.entries(); // ZIPファイル内の全てのファイルを展開 while ( enumZip.hasMoreElements() ) { // ZIP内のエントリを取得 ZipEntry zipEntry = (java.util.zip.ZipEntry)enumZip.nextElement(); //出力ファイル取得 File unzipFile = new File(unzipPath); File outFile = new File(unzipFile.getAbsolutePath() + "/" + baseDir.getName(), zipEntry.getName()); if ( zipEntry.isDirectory() ) outFile.mkdir(); else { // 圧縮ファイル入力ストリーム作成 BufferedInputStream in = new BufferedInputStream(zipFile.getInputStream(zipEntry)); // 親ディレクトリがない場合、ディレクトリ作成 if ( !outFile.getParentFile().exists() ) outFile.getParentFile().mkdirs(); // 出力オブジェクト取得 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFile)); // 読み込みバッファ作成 byte[] buffer = new byte[1024]; // 解凍ファイル出力 int readSize = 0; while ( (readSize = in.read(buffer)) != -1 ) { out.write(buffer, 0, readSize); } // クローズ try { out.close(); } catch (Exception e) {} try { in.close(); } catch (Exception e) {} } } // 解凍処理成功 return true; } catch(Exception e) { // エラーログ出力 System.out.println(e.toString()); // 解凍処理失敗 return false; } finally { if ( zipFile != null ) try { zipFile.close(); } catch (Exception e) {} } } }
Sponsored Links
解凍(UNZIP)する
指定した ZIP ファイルを、指定したディレクトリに解凍します。
引数 | 型 | 説明 |
---|---|---|
zipFileFullPath | String | ZIP ファイルのパスを指定します。 ( 例: C:/samples/unzip/サンプル.zip ) |
unzipPath | String | 圧縮したいディレクトリを指定します。 ( 例; C:/samples/unzip ) |
それでは、テストしてみましょう。
まずは、[ C:/samples/サンプル(フォルダ無).zip ] という ZIP ファイルを、[ C:/samples/unzip ] のディレクトリへ解凍してみます。この ZIP 内には、フォルダがありません。テキストファイルが 2 つあるだけです。
以下のテストソースを実行します。
ZipUnCompressUtils.unzip("C:/samples/unzip/サンプル(フォルダ無).zip", "C:/samples/unzip");
結果は、以下の通りです。
おおおー、いい感じー^^
次は、[ C:/samples/サンプル(フォルダ有).zip ] という ZIP ファイルを、[ C:/samples/unzip ] のディレクトリへ解凍してみます。この ZIP 内には、txt というフォルダがあります。フォルダ内はテキストファイルがあります。
以下のテストソースを実行します。
ZipUnCompressUtils.unzip("C:/samples/unzip/サンプル(フォルダ有).zip", "C:/samples/unzip");
結果は、以下の通りです。
ふむふむ、いい感じですねー^^
ZIP 圧縮する方法
JavaでZIP圧縮するには「Java ZIP圧縮する方法」を参考にしてみてください。
おつかれさまでした。
Sponsored Links