パスワード付きのZipファイルをJavaで処理する必要性が出てきました。
普段は java.util.zip.ZipInputStream を使って↓のように実装しますが、
FileInputStream fis = new FileInputStream(ファイル名);
ZipInputStream zis = new ZipInputStream(fis);
InputStreamReader in = new InputStreamReader(zis, “UTF-8”);
パスワード付きのzipは食えないじゃんて事で。
ググってたらStackOverFlowの↓に行き着いて
How to use zip4j to extract an zip file with password protection
↓こんなドンピシャな返答が。。
Try the following and make sure you are using the most recent Zip4j library (1.3.1):
String source = "folder/source.zip"; String destination = "folder/source/"; String password = "password"; try { ZipFile zipFile = new ZipFile(source); if (zipFile.isEncrypted()) { zipFile.setPassword(password); } zipFile.extractAll(destination); } catch (ZipException e) { e.printStackTrace(); }
ということで、Zip4jのウェブサイトからjarをダウンロードします。
http://www.lingala.net/zip4j/download.php
hogeっていうディレクトリに2つテキストファイル作って、
Lhaplusっていうソフトウエアでパスワード付きのzipにします。
ダウンロードしたzip4j_1.3.1.jarにクラスパス通して、ZipFileというクラスをインポートして
上記のStackOverFlowに載ってた例をまんまで叩いてみると、、、
import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; public class unzipper { public static void main(String args[]) { String source = "hoge.zip"; String destination = "dest/"; String password = "hoge"; try { ZipFile zipFile = new ZipFile(source); if (zipFile.isEncrypted()) { zipFile.setPassword(password); } zipFile.extractAll(destination); } catch (ZipException e) { e.printStackTrace(); } } }
狙った通りに解凍されてて、
中身もOKでした。
って事でZip4j便利ですね~。
コメント