`
sdkd_Tiger
  • 浏览: 26068 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java实现文件解压缩

    博客分类:
  • Java
阅读更多
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipInputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;



/**
 * 文件解压缩,需要依赖ant.jar
 *
 */
public class Zip{
    private ZipInputStream  zipIn;      //解压Zip
    private ZipOutputStream zipOut;     //压缩Zip
    private java.util.zip.ZipEntry        zipEntry;
    private int      bufSize;    //size of bytes
    private byte[]          buf;
    private int             readedBytes;
    
    /**
     * 默认buf:1024
     */
    public Zip(){
        this(1024);
    }
    /**
     * 带缓冲大小参数的构造方法
     * @param bufSize
     */
    public Zip(int bufSize){
        this.bufSize = bufSize;
        this.buf = new byte[this.bufSize];
    }
    
    /**
     * 压缩文件或文件夹
     * @param zipDirectory 文件或文件夹的路径
     * @param zipFileName 压缩后的文件名,如果为null,
       则文件是文件的名称+.zip;文件夹是文件夹的名+.zip
     */
    public void doZip(String zipDirectory,String zipFileName){
        //zipDirectoryPath:需要压缩的文件夹名
        File zipDir = new File(zipDirectory);
        if(zipFileName==null)
        	zipFileName = zipDir.getName() + ".zip";
        if(zipFileName.indexOf(".zip")==-1)
        	zipFileName+=".zip";
        String zipPath="";
        try{
	        if(zipDir.getParentFile()!=null){
	        	zipPath=zipDir.getParentFile().getCanonicalPath()+File.separator;
	        }
	        File zipOutFile=new File(zipPath+zipFileName);
	        
            zipOut = new ZipOutputStream(new BufferedOutputStream(new 
            FileOutputStream(zipOutFile)));
            zipOut.setEncoding("gbk");
            handleDir(zipDir , zipOut,zipPath);
            zipOut.close();
        }catch(IOException ioe){
            ioe.printStackTrace();
        }
    }


    private void handleDir(File dir , ZipOutputStream zipOut,String basePath) 
        throws IOException{
        FileInputStream fileIn;
        
        if(dir.isDirectory()){
        	File[] files;
        	files = dir.listFiles();
            if(files.length == 0){//如果目录为空,则单独创建之.
                //ZipEntry的isDirectory()方法中,目录以"/"结尾.
            	zipOut.putNextEntry(new ZipEntry(dir.getCanonicalPath().
                substring(basePath.length()) + "/"));
                zipOut.closeEntry();
            }else{//如果目录不为空,则分别处理目录和文件.
                for(File fileName : files){
                	handleDir(fileName,zipOut,basePath);
                }
            }
        }else{
        	fileIn = new FileInputStream(dir);
            zipOut.putNextEntry(new ZipEntry(dir.getCanonicalPath().
            substring(basePath.length())));
            while((readedBytes = fileIn.read(buf))>0){
                zipOut.write(buf , 0 , readedBytes);
            }
            fileIn.close();
            zipOut.closeEntry();
        }
    }

    /**
     * 解压zip包
     * @param unZipfileName 需要解压的zip文件路径名
     */
    public void unZip(String unZipfileName){
        FileOutputStream fileOut;
        File file;
        
		try {
			String basePath=new File(unZipfileName).getParentFile().getCanonicalPath();
			zipIn = new ZipInputStream(new BufferedInputStream(
					new FileInputStream(unZipfileName)));
			while ((zipEntry =zipIn.getNextEntry()) != null) {
				file = new File(basePath+File.separator+zipEntry.getName());
				if (zipEntry.isDirectory()) {
					file.mkdirs();
				} else {
					File parent = file.getParentFile();
					if (!parent.exists()) {
						parent.mkdirs();
					}
					fileOut = new FileOutputStream(file);
					while ((readedBytes = zipIn.read(buf)) > 0) {
						fileOut.write(buf, 0, readedBytes);
					}
					fileOut.close();
				}
				zipIn.closeEntry();
			}
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
    }

    /**
     * 设置缓冲大小
     * @param bufSize
     */
    public void setBufSize(int bufSize){
        this.bufSize = bufSize;
    }


    public static void main(String[] args)throws Exception{
		Zip zip = new Zip();
		String file1 = "C:\\ggg";
		zip.doZip(file1,null);
    }
}
分享到:
评论

相关推荐

    java实现文件解压缩,ZipInputStream,ZipOutputStream

    java实现文件解压缩,ZipInputStream,ZipOutputStream

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

    4. **源代码实现**:实践中提供的源代码展示了如何使用Java API来实现文件和目录的压缩与解压缩。这可能包括读取文件,创建压缩流,写入数据到压缩流,以及从压缩流中读取和写入文件等步骤。 5. **文件操作**:在...

    Java实现压缩解压缩文件和文件夹(附源码)

    Java实现压缩解压缩文件和文件夹(附源码) zip unzip 压缩 解压缩

    文件解压缩实现

    总结起来,文件解压缩实现涉及对zip文件格式的理解、使用Java的`java.util.zip`包以及正确处理文件流。通过`MyZip.java`这个文件,我们可以学习到如何在Java中进行文件的压缩和解压缩操作,这对于处理大量数据的项目...

    java压缩文件解压缩和文件的压缩

    在Java编程语言中,处理...通过以上这些知识点,你可以构建一个强大的Java工具类,实现ZIP和RAR文件的压缩与解压缩,包括处理加密的ZIP文件。这个工具类可以是项目中一个可靠的助手,提高代码的可重用性和可维护性。

    java实现文件的压缩解压

    下面是一个简单的文件解压缩示例: ```java import java.io.*; import java.util.zip.*; public class Unzip { public static void main(String[] args) throws IOException { ZipFile zipFile = new ZipFile(...

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    在Java编程语言中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。这个包提供了一系列的类,如`ZipOutputStream`用于创建ZIP压缩文件,`ZipInputStream`则用于读取和解压缩ZIP文件。在本教程中...

    java文件解压缩工具箱及案例

    本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,我们需要了解两个核心库:`java-unrar-1.7.0-1.jar` 和 `ant-1.8.2.jar`。 `java-unrar-1.7.0-1....

    Huffman 压缩解压缩 Java实现

    需要注意的是,Java实现的Huffman压缩解压缩不适用于二进制文件,因为二进制文件的字节分布与ASCII文档不同,直接应用ASCII字符频率统计可能会导致压缩效果不佳。对于二进制文件,通常需要先进行预处理,如使用字节...

    java自动解压缩文件

    Java自动解压缩文件是编程领域中的一个重要话题,尤其是在服务器端应用中,经常需要处理上传的压缩文件并进行解压操作。Java提供了丰富的API来支持这一功能,主要涉及到`java.util.zip`包中的类,如`ZipInputStream`...

    使用Java向服务器上传文件压缩包并实现解压缩

    在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...

    JAVA文件压缩与解压缩实践的实现.rar

    Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件解压缩成原始文件的过程。 常见的压缩格式包括ZIP、GZIP、TAR等,Java提供了相应的API来实现对这些格式的操作。 功能特点: ...

    java实现压缩解压缩

    在Java编程语言中,实现文件的压缩和解压缩是一项常见的任务,特别是在开发Web应用程序时。本文将深入探讨如何使用Java API来完成这项工作,以及它在实际项目中的应用。 Java提供了一个名为`java.util.zip`的包,...

    哈夫曼编码实现压缩解压缩java

    哈夫曼编码是一种高效的数据编码方法...在Java中,我们可以使用面向对象的方式设计数据结构和算法,结合文件操作类实现文件的压缩与解压缩。通过这个过程,我们可以有效地减小文本文件的存储空间,提高存储和传输效率。

    java实现rar压缩与解压缩

    在Java编程语言中,实现RAR压缩与解压缩是一项常见的任务,尤其在处理大量数据或打包文件以便于传输时。本文将深入探讨如何使用Java来实现这个功能,主要关注`FileUtil.java`文件中的代码实现。 首先,Java本身并不...

    Java文件解压缩实现

    本文将详细介绍如何使用Java语言实现文件解压缩的功能。解压缩操作是计算机系统中的常见需求之一,尤其是在处理大量数据或需要从压缩包中提取文件的情况下。本示例代码展示了如何读取一个.zip格式的压缩文件,并将其...

Global site tag (gtag.js) - Google Analytics