从中午开始学习压缩流的使用一直到现在才搞定压缩,最后发现居然是两个反斜杠错了 感觉都不会爱了,,,哈哈
java.util.zip包中提供了一系列的类可以来实现zip的压缩,
Zip压缩流的创建与其他的流的创建没有什么区别;例如
ZipOutputStream ops = new ZipOutputStream(new FileOutputStream("D:\\test.zip"));
ZIP输入流打开后,你可以使用getNextEntry方法来读取ZIP文件中的条目数,该方法返回一个ZipEntry对象。如果到达文件的尾部,getNextEntry返回null:
ZipEntry entry; while((entry = zin.getNextEntry()) != null) { // extract data // open output streams } |
实现单文件的压缩;
代码如下;
首先在D盘中创建要压缩的文件夹
package ZIP文件流;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream.PutField;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* Zip格式的文件压缩
* @author Administrator
*
*/
public class Copy2Test {
public static void main(String[] args) {
//单文件压缩
Copy2Txt();
}
/**
* 压缩单文件的方法
* 1,定义文件压缩输出流
* 2,实例化一个文件压缩的对象
* 3,创建文件输入流
* 4,将输入流写到文件压缩流中
* @throws FileNotFoundException
*/
public static void Copy2Txt() {
try{
//1,创建文件输出时的文件
ZipOutputStream ops = new ZipOutputStream(new FileOutputStream("D:\\test.zip"));
//2,创建输出文件中的对象
ZipEntry entry = new ZipEntry("ab.txt");
//创建一个文档注释
ops.setComment("Here is how we compressed in Java");
//将对象放到压缩文档中
ops.putNextEntry(entry);
//3,创建文件输入流
InputStream fis = new FileInputStream("D:\\ab.txt");
// int len = 0;
// while ((len = fis.read()) != -1)
// ops.write(len);
int len = fis.read();
while(len !=-1){
ops.write(len);
len = fis.read();
}
fis.close();
ops.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
源文件与压缩后的文件
源文件中的内容
压缩文件中的内容
压缩多个文件的代码如下;
package ZIP文件流;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream.PutField;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* Zip格式的文件压缩
* @author Administrator
*
*/
public class Copy2Test {
public static void main(String[] args) {
//多文件压缩
Copy2Demo();
System.out.println("//");
}
/***
*多文件压缩
*/
public static void Copy2Demo() {
try {
File file = new File("F:\\test");
//1,创建文件输出时的文件
ZipOutputStream zop = new ZipOutputStream(new FileOutputStream("F:\\test.zip"));
zop.setComment("多文本压缩");
isFile(zop,file,"");
zop.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 判断文件还是文件目录
* @param zop 输出流
* @param file 文件
* @param dir 目录名字
* @throws IOException
*/
private static void isFile(ZipOutputStream zop,File file,String dir) throws IOException{
//如果是目录
if(file.isDirectory()){
//将文件保存到文件数组中
File[] fil = file.listFiles();
//遍历出来
for(File files: fil ){
isFile(zop,files,dir+"\\"+file.getName());
}
}else{
String entryName = null;
//判断文件名是否为空
if(!"".equals(dir)){
entryName = dir+"\\"+file.getName();
}
else{
entryName = file.getName();
}
//根据获取到的名字创建文件对象
ZipEntry entrys = new ZipEntry(entryName);
zop.putNextEntry(entrys);
//创建文件输入流
InputStream fim = new FileInputStream(file);
int lens =fim.read();
while(lens!=-1){
zop.write(lens);
lens = fim.read();
}
fim.close();
}
}
}
源文件与压缩文件
压缩文件中被压缩的文件
压缩文件中Testfile中的文件