Java ZIP 解凍する方法 ディレクトリ指定 - ZipEntry・ZipFile ホームページ制作 | 墨田区

Java ZIP 解凍する方法 ディレクトリ指定 – ZipEntry・ZipFile

LINEで送る
Pocket

JavaでZipEntryとZipFileを使ってZIPファイルを解凍する方法 をご紹介します。

実務では、ZIP 解凍したい方法として、「特定のディレクトリに解凍したい」などの要望があるかと思います。これを実現するサンプルを用意しました。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


ソース

それでは、実際のソースを見ながら解説してきます。
今回は、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) {}
        }
    }
}

unzip

指定した ZIP ファイルを、指定したディレクトリに解凍します。

引数説明
zipFileFullPathStringZIP ファイルのパスを指定します。
( 例: C:/samples/unzip/サンプル.zip )
unzipPathString圧縮したいディレクトリを指定します。
( 例; C:/samples/unzip )

それでは、テストしてみましょう。
まずは、[ C:/samples/サンプル(フォルダ無).zip ] という ZIP ファイルを、[ C:/samples/unzip ] のディレクトリへ解凍してみます。
この ZIP 内には、フォルダがありません。テキストファイルが 2 つあるだけです。

unZip Compress 001

unZip Compress 002

以下のテストソースを実行します。

ZipUnCompressUtils.unzip("C:/samples/unzip/サンプル(フォルダ無).zip", "C:/samples/unzip");

結果は、以下の通りです。
unZip Compress 003
unZip Compress 004

次は、[ C:/samples/サンプル(フォルダ有).zip ] という ZIP ファイルを、[ C:/samples/unzip ] のディレクトリへ解凍してみます。
この ZIP 内には、txt というフォルダがあります。
フォルダ内はテキストファイルがあります。
unZip Compress 005

unZip Compress 006
以下のテストソースを実行します。

ZipUnCompressUtils.unzip("C:/samples/unzip/サンプル(フォルダ有).zip", "C:/samples/unzip");

結果は、以下の通りです。

unZip Compress 007

unZip Compress 008

ZIP 圧縮

ZIP 圧縮 については、こちら をご覧ください。


おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

Javaの勉強が思うように進まないときは!

Javaの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Javaコースあり!オンライン完結型 テックアカデミー TechAcademy [テックアカデミー]

どこかに通う必要なく、自宅でプログラミングやアプリ開発を学ぶことができるのが特徴のスクールです。未経験からプロになるまで最短4週間という、超短期集中型の学習ができます。年齢層は10代〜40代の男女が中心で、学引があり多くの学生が受講しているそうですよ。オンラインで受講ができるスクールですので、全国どこからでも学習ができますね。

更にさらに、パーソナルメンターにチャット質問できちゃうんです!!

これは素晴らしいことですよ!ハマったり困ったことが起こるのがプログラミングの世界。知っている誰かに聞けば数分で解決することが、自分だけだと何時間もかかったりしますから!いや、これホントですよ。

しかし、便利な世の中になりましたよねー。一昔前ではオンラインで学習できるなんて、思いもよりませんでしたから。講師もバリバリのエンジニアですので、現場で使えるスキルを教えてもらえます。なんとも素晴らしいスクールがあったものですね。学割を使えば社会人より半額以下で受講できますから、学生さんには超おすすめです。

これから Java プログラミングを勉強して、将来はプログラマーとして活躍したいと思っている方には、就職保証付きJavaエンジニアコース というのがおすすめです。就職先まで保証してくれるとなれば、もう安心して学習に専念できますね。夢への第一歩はここから始まるのかも。あ、将来はライバルですね^^

オンラインスクールですから営業エリアは全国です。
気になる方は一度チェックしてみてください。無料の動画説明会も常時開催していますよ。


Javaコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL