(java 基础知识) Zip解压与压缩(java.util.zip)
java哥
阅读:668
2021-04-01 10:14:35
评论:0
下面的分别是写和读zip文件,其中写是递归的,功能完备了。读只是读根目录的,缺少递归。
而且没有涉及中文问题:
- 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;
- }
- }
- 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());
- }
- }
- }
测试通过的。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。