我们经常会使用WinZIP等压缩软件将文件进行压缩以方便传输。在java里面也提供了将文件进行压缩以减少传输时的数据量的类,可以很方便的将文件压缩成ZIP、JAR、GZIP等形式,GZIP主要是在Linux系统下的压缩文件。
下面主要讲的就是ZIP形式的压缩文件,而JAR、GZIP形式的压缩文件也是类似的用法。
ZIP是一种很常见的压缩形式,在java中要实现ZIP的压缩主要用到的是java.util.zip这个包里面的类。主要有ZipFile、 ZipOutputStream、ZipInputStream和ZipEntry。ZipOutputStream是用来压缩文件的,ZipInputStream和ZipFile是用来解压缩文件的,在压缩和解压缩的过程中,ZipEntry都会用到。在java的Zip压缩文件中,每一个子文件都是一个ZipEntry对象。
压缩文件:
02 | import java.io.FileInputStream; |
03 | import java.io.FileOutputStream; |
04 | import java.io.IOException; |
05 | import java.io.InputStream; |
06 | import java.nio.charset.Charset; |
07 | import java.util.zip.ZipEntry; |
08 | import java.util.zip.ZipOutputStream; |
10 | public class ZipOutputStreamTest { |
12 | public static void main(String args[]) throws IOException { |
17 | public static void test1() throws IOException { |
18 | ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( "D:\\testZip.zip" ), Charset.forName( "GBK" )); |
20 | ZipEntry entry = new ZipEntry( "ab.txt" ); |
22 | zos.setComment( "zip测试for单个文件" ); |
24 | zos.putNextEntry(entry); |
25 | InputStream is = new FileInputStream( "D:\\ab.txt" ); |
27 | while ((len = is.read()) != - 1 ) |
33 | public static void test2() throws IOException { |
34 | File inFile = new File( "D:\\test" ); |
35 | ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( "D:\\test.zip" ), Charset.forName( "GBK" )); |
36 | zos.setComment( "多文件处理" ); |
37 | zipFile(inFile, zos, "" ); |
41 | public static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException { |
42 | if (inFile.isDirectory()) { |
43 | File[] files = inFile.listFiles(); |
45 | zipFile(file, zos, dir + "\\" + inFile.getName()); |
47 | String entryName = null ; |
49 | entryName = dir + "\\" + inFile.getName(); |
51 | entryName = inFile.getName(); |
52 | ZipEntry entry = new ZipEntry(entryName); |
53 | zos.putNextEntry(entry); |
54 | InputStream is = new FileInputStream(inFile); |
56 | while ((len = is.read()) != - 1 ) |
解压缩文件:
02 | import java.io.FileInputStream; |
03 | import java.io.FileOutputStream; |
04 | import java.io.IOException; |
05 | import java.io.InputStream; |
06 | import java.io.OutputStream; |
07 | import java.nio.charset.Charset; |
08 | import java.util.zip.ZipEntry; |
09 | import java.util.zip.ZipFile; |
10 | import java.util.zip.ZipInputStream; |
12 | public class ZipInputStreamTest { |
14 | public static void main(String args[]) throws IOException { |
15 | File file = new File( "D:\\test.zip" ); |
16 | ZipFile zipFile = new ZipFile(file); |
18 | ZipInputStream zipInputStream = new ZipInputStream( new FileInputStream(file), Charset.forName( "GBK" )); |
19 | ZipEntry zipEntry = null ; |
20 | while ((zipEntry = zipInputStream.getNextEntry()) != null ) { |
21 | String fileName = zipEntry.getName(); |
22 | File temp = new File( "D:\\unpackTest\\" + fileName); |
23 | if (! temp.getParentFile().exists()) |
24 | temp.getParentFile().mkdirs(); |
25 | OutputStream os = new FileOutputStream(temp); |
27 | InputStream is = zipFile.getInputStream(zipEntry); |
29 | while ((len = is.read()) != - 1 ) |
34 | zipInputStream.close(); |
转自:
http://haohaoxuexi.iteye.com/blog/1235360