最近在看java se 的IO 部分 , 看到 java 的文件的壓縮和解壓比較有意思,主要用到了兩個IO流-ZipInputStream, ZipOutputStream,不只能夠對文件進行壓縮,還能夠對文件夾進行壓縮和解壓。java
ZipInputStream位於java.util.zip包下。下面是它的API,比較簡單。ui
ZipOutputStream位於java.util.zip包下。下面是它的API,比較簡單。spa
1 public class TestFile 2 { 3 public static void main ( String [ ] args ) throws IOException 4 { 5 // new a file input stream
6 FileInputStream fis = new FileInputStream ( 7 "/home/liangruihua/ziptest/1.txt" ) ; 8 BufferedInputStream bis = new BufferedInputStream ( fis ) ; 9
10 // new a zipPutputStream 11 // /home/liangruihua/ziptest/1.zip -- the out put file path and 12 // name
13 ZipOutputStream zos = new ZipOutputStream ( 14 new FileOutputStream ( 15 "/home/liangruihua/ziptest/1.zip" ) ) ; 16 BufferedOutputStream bos = new BufferedOutputStream ( zos ) ; 17
18 // set the file name in the .zip file
19 zos.putNextEntry ( new ZipEntry ( "1.txt" ) ) ; 20
21 // set the declear
22 zos.setComment ( "by liangruihua test!" ) ; 23
24 byte [ ] b = new byte [ 100 ] ; 25 while ( true ) 26 { 27 int len = bis.read ( b ) ; 28 if ( len == - 1 ) 29 break ; 30 bos.write ( b , 0 , len ) ; 31 } 32 fis.close ( ) ; 33 zos.close ( ) ; 34 } 35 }
1 public class TestDir 2 { 3 public static void main ( String [ ] args ) throws IOException 4 { 5 // the file path need to compress
6 File file = new File ( "/home/liangruihua/ziptest/test" ) ; 7 ZipOutputStream zos = new ZipOutputStream ( 8 new FileOutputStream ( 9 "/home/liangruihua/ziptest/test.zip" ) ) ; 10
11 // judge the file is the directory
12 if ( file.isDirectory ( ) ) 13 { 14 // get the every file in the directory
15 File [ ] files = file.listFiles ( ) ; 16
17 for ( int i = 0 ; i < files.length ; i ++ ) 18 { 19 // new the BuuferedInputStream
20 BufferedInputStream bis = new BufferedInputStream ( 21 new FileInputStream ( 22 files [ i ] ) ) ; 23 // the file entry ,set the file name in the zip 24 // file
25 zos.putNextEntry ( new ZipEntry ( file 26 .getName ( ) 27 + file.separator 28 + files [ i ].getName ( ) ) ) ; 29 while ( true ) 30 { 31 byte [ ] b = new byte [ 100 ] ; 32 int len = bis.read ( b ) ; 33 if ( len == - 1 ) 34 break ; 35 zos.write ( b , 0 , len ) ; 36 } 37
38 // close the input stream
39 bis.close ( ) ; 40 } 41
42 } 43 // close the zip output stream
44 zos.close ( ) ; 45 } 46 }
1 public class TestZipInputStream 2 { 3 public static void main ( String [ ] args ) throws ZipException , 4 IOException 5 { 6 // get a zip file instance
7 File file = new File ( "/home/liangruihua/ziptest/test.zip" ) ; 8
9 // get a ZipFile instance
10 ZipFile zipFile = new ZipFile ( file ) ; 11
12 // create a ZipInputStream instance
13 ZipInputStream zis = new ZipInputStream ( new FileInputStream ( 14 file ) ) ; 15
16 // create a ZipEntry instance , lay the every file from 17 // decompress file temporarily
18 ZipEntry entry = null ; 19
20 // a circle to get every file
21 while ( ( entry = zis.getNextEntry ( ) ) != null ) 22 { 23 System.out.println ( "decompress file :"
24 + entry.getName ( ) ) ; 25
26 // define the path to set the file
27 File outFile = new File ( "/home/liangruihua/ziptest/"
28 + entry.getName ( ) ) ; 29
30 // if the file's parent directory wasn't exits ,than 31 // create the directory
32 if ( ! outFile.getParentFile ( ).exists ( ) ) 33 { 34 outFile.getParentFile ( ).mkdir ( ) ; 35 } 36
37 // if the file not exits ,than create the file
38 if ( ! outFile.exists ( ) ) 39 { 40 outFile.createNewFile ( ) ; 41 } 42
43 // create an input stream
44 BufferedInputStream bis = new BufferedInputStream ( 45 zipFile.getInputStream ( entry ) ) ; 46
47 // create an output stream
48 BufferedOutputStream bos = new BufferedOutputStream ( 49 new FileOutputStream ( outFile ) ) ; 50 byte [ ] b = new byte [ 100 ] ; 51 while ( true ) 52 { 53 int len = bis.read ( b ) ; 54 if ( len == - 1 ) 55 break ; 56 bos.write ( b , 0 , len ) ; 57 } 58 // close stream
59 bis.close ( ) ; 60 bos.close ( ) ; 61 } 62 zis.close ( ) ; 63
64 } 65 }