Как сжать файлы в формате ZIP
Java поставляется с библиотекой «java.util.zip» для сжатия данных в формате ZIp. Общая концепция довольно проста.
-
Прочитать файл с «FileInputStream»
-
Добавьте имя файла в «ZipEntry» и выведите его в «ZipOutputStream»
1. Простой ZIP-пример
Прочтите файл «C:\spy.log» и сожмите его в zip-файл - «C:\MyFile.zip».
package com.example.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.example.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 { ListfileList; private static final String OUTPUT_ZIP_FILE = "C:\\MyFile.zip"; private static final String SOURCE_FOLDER = "C:\\testzip"; AppZip(){ fileList = new ArrayList (); } 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
Follow Up
Это может вас заинтересовать -How to decompress it from a Zip file