Java ZIP壓縮文件使用總結
阿新 • • 發佈:2017-12-24
except println cfi cto 分享圖片 使用總結 開發 ioe input
做Java Web開發,有時候遇到將多個文件或者文件夾壓縮成一個.zip文件,供前端下載。Java的JDK中提供一個java.util.zip的接口,供大家使用。如下圖:
圖上就是Java 的JDK提供的接口,但是壓縮文件或者文件夾的時候,怎麽使用上面的接口呢?下面我給出幾個相關的接口,這些接口是下面壓縮文件或者文件夾過程中使用到的。
java.util.zip.ZipEntry;
java.util.zip.ZipOutputStream;
下面的壓縮過程主要是通過這兩個接口壓縮文件或者文件夾;
下面先給出源碼,後面詳細介紹的接口中的方法:
package ZIPUtil; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 學習使用java.util.zip壓縮文件或者文件夾 * @author lhm * */ public class ZIPUtil { /** * @param args 主方法 */ public static void main(String[] args) { // TODO Auto-generated method stub //第一個參數是需要壓縮的源路徑;第二個參數是壓縮文件的目的路徑,這邊需要將壓縮的文件名字加上去 compress("H:\\zip/scala","H:\\zip/oo.zip"); } /**s * 壓縮文件 * @param srcFilePath 壓縮源路徑 * @param destFilePath 壓縮目的路徑 */ public static void compress(String srcFilePath, String destFilePath) { // File src = new File(srcFilePath); if (!src.exists()) { throw new RuntimeException(srcFilePath + "不存在"); } File zipFile = new File(destFilePath); try { FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream zos = new ZipOutputStream(fos); String baseDir = ""; compressbyType(src, zos, baseDir); zos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 按照原路徑的類型就行壓縮。文件路徑直接把文件壓縮, * @param src * @param zos * @param baseDir */ private static void compressbyType(File src, ZipOutputStream zos,String baseDir) { if (!src.exists()) return; System.out.println("壓縮路徑" + baseDir + src.getName()); //判斷文件是否是文件,如果是文件調用compressFile方法,如果是路徑,則調用compressDir方法; if (src.isFile()) { //src是文件,調用此方法 compressFile(src, zos, baseDir); } else if (src.isDirectory()) { //src是文件夾,調用此方法 compressDir(src, zos, baseDir); } } /** * 壓縮文件 */ private static void compressFile(File file, ZipOutputStream zos,String baseDir) { if (!file.exists()) return; try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(baseDir + file.getName()); zos.putNextEntry(entry); int count; byte[] buf = new byte[1024]; while ((count = bis.read(buf)) != -1) { zos.write(buf, 0, count); } bis.close(); } catch (Exception e) { // TODO: handle exception } } /** * 壓縮文件夾 */ private static void compressDir(File dir, ZipOutputStream zos,String baseDir) { if (!dir.exists()) return; File[] files = dir.listFiles(); if(files.length == 0){ try { zos.putNextEntry(new ZipEntry(baseDir + dir.getName()+File.separator)); } catch (IOException e) { e.printStackTrace(); } } for (File file : files) { compressbyType(file, zos, baseDir + dir.getName() + File.separator); } } }
java.util.zip-壓縮流程:
先將文件加載到文件流FileInputStream中,再將文件流輸入到ZipOutputStream;
源文件路徑:H:\\zip/scala,目的壓縮文件zip的路徑:H:\\zip/oo.zip
Java ZIP壓縮文件使用總結