2009年07月02日

【1日1Java】ZipInputStreamで解凍

// JRE 1.6.0_07
// java.util.zip.ZipInputStream
// ZipInputStreamクラスを使用してZipファイルの解凍
// tag zip


// Zipファイル読み込み
String fileName = "test.zip";
ZipInputStream is = new ZipInputStream( new FileInputStream( fileName ) );

// まず、ファイルと同名のディレクトリ(拡張子除く)を作成する
String dirName = fileName.substring( 0, fileName.lastIndexOf( '.' ) );
new File( dirName ).mkdir();

// 全エントリーを舐める
ZipEntry entry;
while( ( entry = is.getNextEntry() ) != null ) {
    // ディレクトリの場合はスキップ
    if( entry.isDirectory() )
        continue;
    
    // ディレクトリ作成
    String[] dirs = entry.getName().split( "/" );
    String subDirName = dirName;
    for( int i = 0; i < dirs.length - 1; i++ ) {
        subDirName += "/" + dirs[i];
        new File( subDirName ).mkdir();
    }
    
    // 内容をファイル書き込み
    OutputStream os = new FileOutputStream( dirName + "/" + entry.getName() );
    int i;
    while( ( i = is.read() ) != -1 )
        os.write( i );
    is.closeEntry();
}

// InputStreamのclose
is.close();