`
dwj147258
  • 浏览: 194811 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java文件压缩与解压

阅读更多

 一、压缩

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.ZipFile;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;

public class Compress {
	private final static Logger logger = Logger.getLogger(Compress.class);
	private int k = 1; // 定义递归次数变量  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
    	Compress book = new Compress();  
        try {  
            book.Compress1("res/date.zip",  
                    new File("res/news"));  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
  
    }
    /**
     * 
     * @param zipName  zip文件名
     * @param inputFile 	输入文件可以是文件夹
     */
    private void Compress1(String zipName , File inputFile) throws Exception{
    	ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipName)) ;
    	BufferedOutputStream bo = new BufferedOutputStream(out);
    	Compress2( out , bo , inputFile , "");
    	out.close();
    	bo.close();
    }
    /**
     * 
     * @param out  zip输出流
     * @param bo   zip输出流装饰类
     * @param file	输入文件或文件夹
     * @param father  上一级文件夹名
     */
    private void Compress2(ZipOutputStream out , BufferedOutputStream bo , File file , String father) throws Exception{
    	if(file.isDirectory()){
    		out.putNextEntry(new ZipEntry(father +file.getName()+"/"));
    		File[] files = file.listFiles();
    		for(File f : files){
   			Compress2(out , bo , f , father+file.getName()+"/");

    		}
    		
    	}
    	else if(file.isFile()){
    		out.putNextEntry(new ZipEntry(father+file.getName()));
    		FileInputStream in = new FileInputStream(file);
    		byte[] buffer = new byte[1024];
    		int length ;
    		while((length = in.read(buffer)) != -1 ){
    			bo.write(buffer);
    		}
    		bo.flush();
    		in.close();
    	}
    }
}

二、解压

package HelloWorld;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class reCompress {
	public static void main(String[] args) {
		try {
			unZip(new File("res/news/cc/date.zip"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void unZip(File zipFile) throws IOException {  
        // 得到压缩文件所在目录  
        String path = zipFile.getAbsolutePath();  
        /**替换所有的反斜杠*/
        path = path.replaceAll("\\\\", "/");  
        /**截取压缩文件所在文件夹*/
        path = path.substring(0, path.lastIndexOf("/"));  
        /**获取压缩文件对象*/
        ZipFile zip = new ZipFile(zipFile);  
        InputStream in = null;  
        OutputStream out = null;  
        try {  
        	/**压缩文件中的所有实体循环*/
            for (@SuppressWarnings("rawtypes") Enumeration entries = zip.entries(); entries.hasMoreElements();) {  
            	/**获取一个实体*/
                ZipEntry entry = (ZipEntry) entries.nextElement();  
                /**获取实体名*/
                String zipEntryName = entry.getName();  
                System.out.println(zipEntryName);  
                /**获取实体的输出流*/
                in = zip.getInputStream(entry);  
                // outPath输出目录  
                /**解压后的文件存放在压缩文件同一目录下*/
                String outPath = path + "/" + zipEntryName;  
                // 判断路径是否存在,不存在则创建文件路径
                /**创建文件的文件夹*/
                File file = new File(outPath.substring(0,  outPath.lastIndexOf('/')));  
                if (!file.exists()) {  
                    file.mkdirs();  
                }  
                // 判断文件全路径是否为文件夹,如果是上面已经创建,不需要解压  
                if (new File(outPath).isDirectory()) {  
                    continue;  
                }  
                /**获取文件的输入流,写文件*/
                out = new FileOutputStream(outPath);  
                byte[] buf = new byte[1024];  
                int len;  
                while ((len = in.read(buf)) > 0) {  
                    out.write(buf, 0, len);  
                }  
            }  
        } catch (IOException e) {  
        } finally {  
            if (in != null) { 
                in.close();  
            }  
            if (out != null) {  
                out.close();  
            }  
        }  
        zip.close();  
    }
}

 

分享到:
评论

相关推荐

    实现java文件压缩与解压

    ### 实现Java文件压缩与解压 #### 一、引言 在计算机科学领域,文件压缩与解压是一项非常实用的技术。它不仅能够减少文件占用的空间,提高存储效率,还能加速文件在网络中的传输速度。Java作为一种广泛使用的编程...

    java文件压缩与解压.doc

    ### Java文件压缩与解压知识点解析 #### 一、Java文件压缩概述 Java中的文件压缩主要涉及使用第三方库Apache Commons Compress或者Apache的工具包`apache.tools.zip`来进行操作。这两种方式都允许开发者轻松地对...

    java 文件zip 压缩与解压

    java 文件zip 压缩与解压 可以直接调用

    JAVA文件压缩与解压缩实践(源代码+论文)

    综上所述,这个实践项目涵盖了Java文件压缩与解压缩的核心技术,是学习和理解Java I/O和压缩库的宝贵资源。通过阅读源代码和论文,开发者不仅可以学习如何在Java中进行文件压缩,还能了解到如何将这些技术应用于实际...

    java 中 zip压缩文件解压工具类

    在Java编程环境中,处理文件压缩和解压缩是常见的任务,特别是在构建可执行的JAR包或者处理数据传输时。本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们...

    java 解压,压缩linux GZ压缩文件

    GZ是一种常用的文件压缩格式,它利用了gzip程序进行压缩,而在Java中,我们可以使用`java.util.zip`包中的类来实现对GZ文件的压缩和解压缩操作。 在给出的代码中,有两个主要的方法:`testGzipOutput()`用于解压GZ...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API...

    Java压缩及解压tar、tar.z格式文件

    Java压缩及解压tar、tar.z格式文件, 需要apache的包ant-1.7.1.jar 这个自己去搜索下下载

    压缩上传解压

    #### 一、Java文件压缩与解压技术概述 在Java开发中,文件的压缩与解压是一项非常实用的功能,尤其在处理大量数据时,通过压缩可以显著减少存储空间的需求以及网络传输的时间。Java标准库提供了`java.util.zip`包来...

    java ftp上传 下载 文件压缩解压

    这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...

    java文件压缩和解压 源码

    java中通过ZipOutputStream和ZipInputStream实现了zip压缩和解压功能。java源码————资源共享,一起进步。

    Java实现的带密码压缩与解压zip文件源码

    在Java编程环境中,处理压缩和解压缩文件是一...以上是关于Java实现带密码的ZIP文件压缩和解压的基本概念和实现细节。通过深入理解这些知识点,开发者可以构建自己的安全文件处理工具,满足对数据隐私和安全性的需求。

    Java中压缩与解压--中文文件名乱码解决办法

    在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名编码不一致,尤其是在Windows系统下,文件名通常采用GB2312或GBK编码,而Java中的`...

    使用 Java 实现的压缩/解压 ZIP 文件的工具类

    在Java编程环境中,处理文件压缩和解压任务是常见的需求,尤其在数据传输或存储时。ZIP文件格式因其广泛支持和高效性而被广泛应用。本文将深入探讨如何使用Java实现ZIP文件的压缩与解压,重点讲解核心API,如`java....

    Java哈夫曼编码的文件的压缩与解压.docx

    本文将围绕Java实现哈夫曼编码的文件压缩与解压进行详细解析。 首先,我们看到`main`方法调用了`zipFile`和`unZipFile`两个静态方法,分别用于文件的压缩和解压缩操作。`zipFile`方法接收源文件路径和目标压缩文件...

    java操作压缩文件和解压文件实例代码(经测试)

    虽然Ant本身不是直接用于文件压缩,但它包含的`ZipTask`和`UnzipTask`可以方便地在Ant脚本中进行文件压缩和解压。如果`ZipFileList.java`使用了Ant的功能,那么可能通过`org.apache.tools.ant.types.FileSet`选择要...

    rar文件压缩解压(java)

    总结,Java中处理RAR文件压缩和解压需要借助第三方库,如Apache Commons Compress或jRar。选择哪种库取决于你的具体需求,如对RAR5格式的支持、性能优化等。在实现过程中,需要了解并掌握这些库的API,以及如何正确...

Global site tag (gtag.js) - Google Analytics