Java实现文件压缩
package com. example ; import java. io. * ;
import java. util. zip. ZipEntry ;
import java. util. zip. ZipOutputStream ; public class ZipUtils { private static final int BUFFER_SIZE = 2 * 1024 ; public static void toZip ( String srcDir, OutputStream out, boolean KeepDirStructure ) throws RuntimeException { long start = System . currentTimeMillis ( ) ; ZipOutputStream zos = null ; try { zos = new ZipOutputStream ( out) ; File sourceFile = new File ( srcDir) ; compress ( sourceFile, zos, sourceFile. getName ( ) , KeepDirStructure ) ; long end = System . currentTimeMillis ( ) ; System . out. println ( "压缩完成,耗时:" + ( end - start) + " ms" ) ; } catch ( Exception e) { throw new RuntimeException ( "zip error from ZipUtils" , e) ; } finally { if ( zos != null ) { try { zos. close ( ) ; } catch ( IOException e) { e. printStackTrace ( ) ; } } } } private static void compress ( File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure ) throws Exception { byte [ ] buf = new byte [ BUFFER_SIZE ] ; if ( sourceFile. isFile ( ) ) { zos. putNextEntry ( new ZipEntry ( name) ) ; int len; FileInputStream in = new FileInputStream ( sourceFile) ; while ( ( len = in. read ( buf) ) != - 1 ) { zos. write ( buf, 0 , len) ; } zos. closeEntry ( ) ; in. close ( ) ; } else { File [ ] listFiles = sourceFile. listFiles ( ) ; if ( listFiles == null || listFiles. length == 0 ) { if ( KeepDirStructure ) { zos. putNextEntry ( new ZipEntry ( name + "/" ) ) ; zos. closeEntry ( ) ; } } else { for ( File file : listFiles) { if ( KeepDirStructure ) { compress ( file, zos, name + "/" + file. getName ( ) , KeepDirStructure ) ; } else { compress ( file, zos, file. getName ( ) , KeepDirStructure ) ; } } } } } public static void main ( String [ ] args) throws Exception { FileOutputStream fos1 = new FileOutputStream ( new File ( "D:/mytest01.zip" ) ) ; ZipUtils . toZip ( "D:/log" , fos1, false ) ; }
}