JavaのZipファイルを解凍(展開)するサンプルです。(確認環境:Java8)
目次
Zipを解凍する | Zipファイルを解凍(展開)する |
コンストラクタとメソッド |
zipファイルを解凍(展開)する
zipファイルを解凍して中にある2つのファイルを取得するサンプルです。
package test1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;
public class Test1 {
public static void main(String[] args) {
// 文字コード
Charset charset = Charset.forName("MS932");
// 入力ファイル
String inputfile1 = "D:\\\\Test1\\zipテスト.zip";
// 出力先
String outputfile1 = "D:\\\\Test1\\";
try(
FileInputStream fis = new FileInputStream(inputfile1);
BufferedInputStream bis = new BufferedInputStream(fis);
ZipInputStream zis = new ZipInputStream(bis,charset);
) {
ZipEntry zipentry;
// zipの中のファイルがあるだけ繰り返す
// 展開後のファイルサイズ、ファイル名に注意
while((zipentry = zis.getNextEntry()) !=null) {
try(FileOutputStream fos = new FileOutputStream(outputfile1 + zipentry.getName());
BufferedOutputStream bos = new BufferedOutputStream(fos);
){
byte[] data = new byte[1024]; // 1KB 調整可
int count = 0;
while((count = zis.read(data)) != -1){
bos.write(data,0,count);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
22行目は、ZipInputStreamクラスです。zipの解凍を行う時に使用します。
27行目からは、zipファイルを解凍してファイルに書き込んでいます。
解凍後のファイルサイズとファイル名に注意します。必要であればチェックを行います。
31行目のサイズは1KBとしています。調整可能です。
以下は、zipテスト.zipファイルから2つのファイルを取得した図です。
コンストラクタとメソッド
以下は、上記コードで使用しているコンストラクタとメソッドです。
ZipInputStreamクラス
public ZipInputStream(InputStream in,Charset charset) |
- コンストラクタです。
- 2つめの引数は、zip内に配置するファイル名の文字コードを指定します。
- 新しいZIP入力ストリームを作成します。
- 以下は、OracleのZipInputStreamクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/zip/ZipInputStream.html
public ZipEntry getNextEntry() throws IOException |
- ZipInputStreamクラスのメソッドです。
- エントリの先頭にストリームを配置します。
- 以下は、OracleのZipInputStreamクラスのgetNextEntryメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/zip/ZipInputStream.html#getNextEntry--
ZipEntryクラス
public getName(String name) |
- ZipEntryクラスのメソッドです。
- エントリの名前を返します。
- 以下は、OracleのZipEntryクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/zip/ZipEntry.html
関連の記事