(java 基础知识) Zip解压与压缩(java.util.zip)
2013-09-03 12:36
471 查看
下面的分别是写和读zip文件,其中写是递归的,功能完备了。读只是读根目录的,缺少递归。
而且没有涉及中文问题:
[c-sharp]
view plaincopyprint?
import java.io.*;
import java.util.zip.*;
public class Zip {
static final int BUFFER = 2048;
static boolean flag = false;
public static void main(String args[])throws IOException{
File file= new File("D:/Temp");
ZipSubdirectory(file);
FileInputStream file1 = new FileInputStream(ZipSubdirectory(file));
System.out.println(file1.toString());
}
//ZipSubdirectory函数将一个指定目录(包括它子目录)压缩成一个同名压缩文件(这里称为"ORIGIN")
public static File ZipSubdirectory(File myDir)throws IOException{
//创建缓冲输入流BufferedInputStream
BufferedInputStream origin = null;
//创建ZipOutputStream对象,将向它传递希望写入文件的输出流
File zipFile=new File("D:/"+myDir.getName()+".zip");
FileOutputStream fos=new FileOutputStream(zipFile);
ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(fos,BUFFER));
//dirContents[]获取当前目录(myDir)所有文件对象(包括子目录名)
File dirContents[]=myDir.listFiles();
//创建临时文件tempFile,使用后删除
File tempFile=null;
try{
//处理当前目录所有文件对象,包括子目录
for(int i=0;i < dirContents.length; i++){
//使用递归方法将当前目录的子目录转成一个ZIP文件,并作为一个ENTRY加进"ORIGIN"
if(dirContents[i].isDirectory()){
tempFile = ZipSubdirectory(dirContents[i]);
flag=true;
}
//如果当前文件不是子目录
else {
tempFile=dirContents[i];
//flag标记tempFile是否由子目录压缩成的ZIP文件
flag = false;
}
System.out.println("Compress file: "+tempFile.getName());
FileInputStream fis = new FileInputStream(tempFile);
origin = new BufferedInputStream(fis,BUFFER);
//为被读取的文件创建压缩条目
ZipEntry entry = new ZipEntry(tempFile.getName());
byte data[]= new byte[BUFFER];
int count;
//在向ZIP输出流写入数据之前,必须首先使用out.putNextEntry(entry); 方法安置压缩条目对象
out.putNextEntry(entry);
//向ZIP 文件写入数据
while((count=origin.read(data,0,BUFFER))!=-1){
out.write(data,0,count);
}
//tempFile是临时生成的ZIP文件,删除它
if(flag==true){
flag = tempFile.delete();
System.out.println("Delete file:"+tempFile.getName()+flag);
}
//关闭输入流
origin.close();
}
out.close();
} catch(Exception e){
System.out.println(e);
}
//递归返回
return zipFile;
}
}
测试通过的。
而且没有涉及中文问题:
[c-sharp]
view plaincopyprint?
import java.io.*;
import java.util.zip.*;
public class Zip {
static final int BUFFER = 2048;
static boolean flag = false;
public static void main(String args[])throws IOException{
File file= new File("D:/Temp");
ZipSubdirectory(file);
FileInputStream file1 = new FileInputStream(ZipSubdirectory(file));
System.out.println(file1.toString());
}
//ZipSubdirectory函数将一个指定目录(包括它子目录)压缩成一个同名压缩文件(这里称为"ORIGIN")
public static File ZipSubdirectory(File myDir)throws IOException{
//创建缓冲输入流BufferedInputStream
BufferedInputStream origin = null;
//创建ZipOutputStream对象,将向它传递希望写入文件的输出流
File zipFile=new File("D:/"+myDir.getName()+".zip");
FileOutputStream fos=new FileOutputStream(zipFile);
ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(fos,BUFFER));
//dirContents[]获取当前目录(myDir)所有文件对象(包括子目录名)
File dirContents[]=myDir.listFiles();
//创建临时文件tempFile,使用后删除
File tempFile=null;
try{
//处理当前目录所有文件对象,包括子目录
for(int i=0;i < dirContents.length; i++){
//使用递归方法将当前目录的子目录转成一个ZIP文件,并作为一个ENTRY加进"ORIGIN"
if(dirContents[i].isDirectory()){
tempFile = ZipSubdirectory(dirContents[i]);
flag=true;
}
//如果当前文件不是子目录
else {
tempFile=dirContents[i];
//flag标记tempFile是否由子目录压缩成的ZIP文件
flag = false;
}
System.out.println("Compress file: "+tempFile.getName());
FileInputStream fis = new FileInputStream(tempFile);
origin = new BufferedInputStream(fis,BUFFER);
//为被读取的文件创建压缩条目
ZipEntry entry = new ZipEntry(tempFile.getName());
byte data[]= new byte[BUFFER];
int count;
//在向ZIP输出流写入数据之前,必须首先使用out.putNextEntry(entry); 方法安置压缩条目对象
out.putNextEntry(entry);
//向ZIP 文件写入数据
while((count=origin.read(data,0,BUFFER))!=-1){
out.write(data,0,count);
}
//tempFile是临时生成的ZIP文件,删除它
if(flag==true){
flag = tempFile.delete();
System.out.println("Delete file:"+tempFile.getName()+flag);
}
//关闭输入流
origin.close();
}
out.close();
} catch(Exception e){
System.out.println(e);
}
//递归返回
return zipFile;
}
}
[c-sharp] view plaincopyprint? import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class Test { public static void main(String[] args) { readFileAndWriteZip(); unZipFile(); } public static void unZipFile() { try{ int BUFFER = 1024; BufferedOutputStream dest = null; FileInputStream fis = new FileInputStream("D:/Temp.zip"); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { System.out.println("Extracting: " + entry); int count; byte data[] = new byte[1024]; FileOutputStream fos = new FileOutputStream("D:/"+entry.getName()); dest = new BufferedOutputStream(fos, BUFFER); while ((count = zis.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, count); } dest.flush(); dest.close(); } zis.close(); } catch (Exception e) { e.printStackTrace(); } } public static void readFileAndWriteZip() { try { } catch (Exception ex){ System.err.println(ex.toString()); } } } import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class Test { public static void main(String[] args) { readFileAndWriteZip(); unZipFile(); } public static void unZipFile() { try{ int BUFFER = 1024; BufferedOutputStream dest = null; FileInputStream fis = new FileInputStream("D:/Temp.zip"); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { System.out.println("Extracting: " + entry); int count; byte data[] = new byte[1024]; FileOutputStream fos = new FileOutputStream("D:/"+entry.getName()); dest = new BufferedOutputStream(fos, BUFFER); while ((count = zis.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, count); } dest.flush(); dest.close(); } zis.close(); } catch (Exception e) { e.printStackTrace(); } } public static void readFileAndWriteZip() { try { } catch (Exception ex){ System.err.println(ex.toString()); } } }
测试通过的。
相关文章推荐
- 使用java.util.zip实现zip压缩和解压
- Java 基于java.util.zip类压缩解压Zip文件
- Java 基于java.util.zip类压缩解压Zip文件
- Java 基于java.util.zip类压缩解压Zip文件
- Java压缩和解压文件工具类ZipUtil
- Java 基于java.util.zip类压缩解压Zip文件
- java.util.zip 的解压和压缩文件夹
- java.util.zip压缩打包文件总结二: ZIP解压技术
- java基础之zip(压缩、解压)
- Java文件压缩与解压之java.util.zip的使用
- 使用java.util.zip实现zip压缩和解压
- 使用java.util.zip压缩、解压文件
- java.util.zip.Deflater 压缩 inflater解压 实例
- java.util.zip包无法正常解压rar软件压缩的rar文件
- Java 基于java.util.zip类压缩解压Zip文件
- java实现zip的压缩和解压(支持中文文件名)
- java解压、压缩、操作ZIP
- 用java.util.zip实现对数据的压缩
- java实用ZIP压缩和解压类
- java实现zip文件压缩,解压