//随便写点留着备用
/**
* @Project: publicapi
* @Title: ZipTest.java
* @Package net.*.test.user
* @author zmn
* @date 2015-1-6 下午01:34:25
* @Copyright: 2015 All rights reserved.
* @since jdk1.6
* @version V1.0
*/
package net.*.test.user;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
* @author amssy
* @version V1.0
*/
//创建压缩文件
public class ZipTest {
//制定缓冲区大小
static final int BUFFER = 2048;
public static void main (String argv[]) {
ZipTest zipTest = new ZipTest();
zipTest.unCompress();
}
/**
* <dt><span class="strong">方法描述:</span></dt><dd>将文件压入压缩文件</dd>
* <dt><span class="strong">作者:</span></dt><dd>zmn</dd>
* <dt><span class="strong">时间:</span></dt><dd>2015-1-6 下午05:38:47</dd>
* @since v1.0
*/
public void compress(){
try {
//声明一个装饰输入流
BufferedInputStream origin = null;
//声明并实例化一个输出流 : 制定输出zip文件位置在 c:\\myfigs.zip 文件可以没有但是盘符和存放路径文件夹必须存在
FileOutputStream dest = new FileOutputStream("c:\\myfigs.zip");
//声明并创建一个压缩流
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
//zip压缩流有两种压缩格式 DEFLATED 只生成zip包不压缩
//out.setMethod(ZipOutputStream.DEFLATED);
//STORED 对数据
//out.setMethod(ZipOutputStream.STORED);
//定义每次读取字节数
byte data[] = new byte[BUFFER];
// get a list of files from current directory
//创建待压缩的文件
File f = new File("c:\\file");
//获取文件夹下文件名集合
String files[] = f.list();
//循环添加压缩文件条目
for (int i=0; i < files.length; i++) {
//创建文件输入流读取文件
FileInputStream fi = new FileInputStream("c:\\file\\"+files[i]);
//创建装饰输入流装饰文件流
origin = new BufferedInputStream(fi, BUFFER);
//创建一个压缩输出流的条目
ZipEntry entry = new ZipEntry(files[i]);
//将跳入添加到输出流中
out.putNextEntry(entry);
//从输出流读取文件添加到压缩文件中
//每次读取后data数组中有数据值 count为偏移量
int count;
while((count = origin.read(data, 0,BUFFER)) != -1)
{
out.write(data, 0, count);
}
origin.close();
}
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* <dt><span class="strong">方法描述:</span></dt><dd>解压压缩文件</dd>
* <dt><span class="strong">作者:</span></dt><dd>zmn</dd>
* <dt><span class="strong">时间:</span></dt><dd>2015-1-6 下午05:59:56</dd>
* @since v1.0
*/
public void unCompress(){
try {
//创建装饰输出流
BufferedOutputStream dest = null;
//创建输入流读取zip
FileInputStream fis = new FileInputStream("c:\\myfigs.zip");
//用zip输入流流封装包裹装饰流进行解析
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
//循环外创建一个条目
ZipEntry entry;
//循环zip中的条目 用法就和普通的流一样 这是装饰流装载了一个条目的流数据
while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
//偏移量
int count;
//储存数组
byte data[] = new byte[BUFFER];
//文件输出流声明输出文件位置
FileOutputStream fos = new FileOutputStream("c:\\"+entry.getName());
//装饰流包裹输出流
dest = new BufferedOutputStream(fos, BUFFER);
//用zip输入流读取压缩文件内容 (此时文件流内已经装载了一个条目的流数据)
while ((count = zis.read(data, 0, BUFFER))
!= -1) {
//用输出流将读取到的data内的数据写出到文件
dest.write(data, 0, count);
}
//清洗装饰流防止挂壁
dest.flush();
//关闭装饰流
dest.close();
}
//关闭压缩流
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}