ZIP形式でファイルを圧縮する方法
Javaには ”
java.util.zip
“ライブラリが付属しており、ZIp形式でデータ圧縮を実行します。全体的なコンセプトはかなり簡単です。
-
”
FileInputStream
“でファイルを読み込む -
”
ZipEntry
“にファイル名を追加し、 ”
ZipOutputStream
“に出力します
1.単純なZIPの例
”
C:\\ spy.log
“ファイルを読み込み、zipファイルに圧縮します – ”
C:\\ MyFile.zip
”
package com.mkyong.zip; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class App { public static void main( String[]args ) { byte[]buffer = new byte[1024]; try{ FileOutputStream fos = new FileOutputStream("C:\\MyFile.zip"); ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry ze= new ZipEntry("spy.log"); zos.putNextEntry(ze); FileInputStream in = new FileInputStream("C:\\spy.log"); int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); zos.closeEntry(); //remember close it zos.close(); System.out.println("Done"); }catch(IOException ex){ ex.printStackTrace(); } } }
2.アドバンスZIPの例 – 再帰的に
”
C:\\ testzip
“フォルダからすべてのファイルを読み込み、zipファイルに圧縮します – ”
C:\\ MyFile.zip
“ディレクトリを再帰的にジップします。
package com.mkyong.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class AppZip { List<String> fileList; private static final String OUTPUT__ZIP__FILE = "C:\\MyFile.zip"; private static final String SOURCE__FOLDER = "C:\\testzip"; AppZip(){ fileList = new ArrayList<String>(); } public static void main( String[]args ) { AppZip appZip = new AppZip(); appZip.generateFileList(new File(SOURCE__FOLDER)); appZip.zipIt(OUTPUT__ZIP__FILE); } /** ** ** Zip it ** @param zipFile output ZIP file location ** / public void zipIt(String zipFile){ byte[]buffer = new byte[1024]; try{ FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream zos = new ZipOutputStream(fos); System.out.println("Output to Zip : " + zipFile); for(String file : this.fileList){ System.out.println("File Added : " + file); ZipEntry ze= new ZipEntry(file); zos.putNextEntry(ze); FileInputStream in = new FileInputStream(SOURCE__FOLDER + File.separator + file); int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); } zos.closeEntry(); //remember close it zos.close(); System.out.println("Done"); }catch(IOException ex){ ex.printStackTrace(); } } /** ** ** Traverse a directory and get all files, ** and add the file into fileList ** @param node file or directory ** / public void generateFileList(File node){ //add file only if(node.isFile()){ fileList.add(generateZipEntry(node.getAbsoluteFile().toString())); } if(node.isDirectory()){ String[]subNote = node.list(); for(String filename : subNote){ generateFileList(new File(node, filename)); } } } /** ** ** Format the file path for zip ** @param file file path ** @return Formatted file path ** / private String generateZipEntry(String file){ return file.substring(SOURCE__FOLDER.length()+1, file.length()); } }
出力
Output to Zip : C:\MyFile.zip File Added : pdf\Java-Interview.pdf File Added : spy\log\spy.log File Added : utf-encoded.txt File Added : utf.txt Done
リファレンス
Java APIを使用したデータの解凍]