概要
Zipファイルを読み込み直接文字列に変換します。
解説
読み込みにはInputStreamクラスのreadAllBytesメソッドを使用しています。
すべてのバイトを一気に読み込んでくれるのでとても便利ですね~。
ただしリファレンスによると、「このメソッドが、すべてのバイトを1つのバイト配列に読み取ると都合が良い簡単なケースで使用するものであることに注意してください。 大量のデータを持つ入力ストリームを読み込むためのものではありません。」という記載がありました。
コード
Unzip.java
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.zip.ZipInputStream;
public class Unzip{
public static void main(String[] args) throws Exception {
String filePath = "ここでZipファイルのパスを指定";
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(filePath)));
//zipファイルの中にファイルがあるだけ繰り返す
while(zis.getNextEntry() !=null){
String str = new String(zis.readAllBytes());
//とりあえず出力しておく
System.out.println(str);
}
zis.close();
}
}
参考
参考までに、少しずつ読み込むコードも載せておきます。
Sample.java
String filePath = "ここで読み込むZipファイルのパスを指定します";
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(filePath)));
String str = null;
byte[] tempBuffer = new byte[1024];//一度に読み込むバイト数
ByteArrayOutputStream streamBuilder = null;
int bytesRead;
//zipファイルの中にファイルがあるだけ繰り返す
while(zis.getNextEntry() !=null){
while ( (bytesRead = zis.read(tempBuffer)) != -1 ){
streamBuilder = new ByteArrayOutputStream();
streamBuilder.write(tempBuffer, 0, bytesRead);
}
//Stringに変換する
str = streamBuilder.toString("UTF-8");
System.out.println(str);
}
zis.close();