`
learnmore
  • 浏览: 605604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java实现压缩和解压缩

    博客分类:
  • java
 
阅读更多
转自于站内兄弟的文章:http://wallimn.iteye.com/blog/566739
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.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

public class ZipToFile {
	
	public static final String ZIP_FILENAME	= "C:\\XJPDA.zip";//需要解压缩的文件名
	public static final String ZIP_DIR = "C:\\XJPDA\\";//需要压缩的文件夹
	public static final String UN_ZIP_DIR = "C:\\";//要解压的文件目录
	public static final int BUFFER = 1024 ;//缓存大小
	
	/**
	* zip压缩功能.
	* 压缩baseDir(文件夹目录)下所有文件,包括子目录
	* @throws Exception
	*/
	public static void zipFile(String baseDir,String fileName) throws Exception{
		List fileList=getSubFiles(new File(baseDir));
		ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));
		ZipEntry ze=null;
		byte[] buf=new byte[BUFFER];
		int readLen=0;
		for(int i = 0; i <fileList.size(); i++) {
			File f=(File)fileList.get(i);
			ze=new ZipEntry(getAbsFileName(baseDir, f));
			ze.setSize(f.length());
			ze.setTime(f.lastModified());	
			zos.putNextEntry(ze);
			InputStream is=new BufferedInputStream(new FileInputStream(f));
			while ((readLen=is.read(buf, 0, BUFFER))!=-1) {
				zos.write(buf, 0, readLen);
			}
			is.close();
		}
		zos.close();
	}
	
	/**
	* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
	* @param baseDir java.lang.String 根目录
	* @param realFileName java.io.File 实际的文件名
	* @return 相对文件名
	*/
	private static String getAbsFileName(String baseDir, File realFileName){
		File real=realFileName;
		File base=new File(baseDir);
		String ret=real.getName();
		while (true) {
			real=real.getParentFile();
			if(real==null) 
				break;
			if(real.equals(base)) 
				break;
			else
				ret=real.getName()+"/"+ret;
		}
		return ret;
	}
	
	/**
	* 取得指定目录下的所有文件列表,包括子目录.
	* @param baseDir File 指定的目录
	* @return 包含java.io.File的List
	*/
	private static List getSubFiles(File baseDir){
		List ret=new ArrayList();
		File[] tmp=baseDir.listFiles();
		for (int i = 0; i <tmp.length; i++) {
			if(tmp[i].isFile())
				ret.add(tmp[i]);
			if(tmp[i].isDirectory())
				ret.addAll(getSubFiles(tmp[i]));
		}
		return ret;
	}
	
	/**
	* 解压缩功能.
	* 将ZIP_FILENAME文件解压到ZIP_DIR目录下.
	* @throws Exception
	*/
	public static void upZipFile() throws Exception{
		ZipFile zfile=new ZipFile(ZIP_FILENAME);
		Enumeration zList=zfile.entries();
		ZipEntry ze=null;
		byte[] buf=new byte[1024];
		while(zList.hasMoreElements()){
			ze=(ZipEntry)zList.nextElement();		
			if(ze.isDirectory()){
	            File f=new File(ZIP_DIR+ze.getName());
	            f.mkdir();
				continue;
			}
			OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));
			InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
			int readLen=0;
			while ((readLen=is.read(buf, 0, 1024))!=-1) {
				os.write(buf, 0, readLen);
			}
			is.close();
			os.close();	
		}
		zfile.close();
	}

	/**
	* 给定根目录,返回一个相对路径所对应的实际文件名.
	* @param baseDir 指定根目录
	* @param absFileName 相对路径名,来自于ZipEntry中的name
	* @return java.io.File 实际的文件
	*/
	public static File getRealFileName(String baseDir, String absFileName){
		String[] dirs=absFileName.split("/");
		File ret=new File(baseDir);
		if(dirs.length>1){
			for (int i = 0; i < dirs.length-1;i++) {
				ret=new File(ret, dirs[i]);
			}
			if(!ret.exists())
				ret.mkdirs();
			ret=new File(ret, dirs[dirs.length-1]);
			return ret;
		}
		return ret;
	}

}

不过上面存在中文问题
是因为java.util.zip下的格式转换有问题

import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
改成
import org.apache.tools.zip.*;
即可!
apache里修正了这一现象。
分享到:
评论

相关推荐

    java实现霍夫曼(huffman)树的压缩和解压缩

    java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩

    java 实现huaffman压缩和解压缩

    这些文件可以帮助我们进一步理解和学习如何在Java环境中实现哈夫曼编码的压缩和解压缩功能。如果你想要深入学习或实践,可以下载这个压缩包,阅读代码,并尝试运行它们来观察压缩和解压缩的效果。

    java中如何实现压缩和解压缩

    本文将深入探讨如何使用Java API来处理ZIP文件格式的压缩和解压缩操作。 首先,我们要了解Java标准库中的`java.util.zip`包,这个包提供了对ZIP文件格式的支持。主要涉及的类有`ZipEntry`和`ZipOutputStream`用于...

    java压缩和解压缩

    Java编程语言提供了强大的文件压缩和解压缩功能,主要通过java.util.zip包中的类来实现,如ZipOutputStream用于压缩,ZipInputStream用于解压缩。本篇将深入探讨这些关键类的使用方法,以及在Java中处理ZIP文件的...

    java实现对文件或文件夹的压缩和解压缩

    在标题中提到的"java实现对文件或文件夹的压缩和解压缩",我们可以使用这个库来实现。具体来说,我们可以创建一个`ZipUtil`类,里面包含压缩和解压缩的静态方法。 首先,为了压缩文件或文件夹,我们需要使用`org....

    java端压缩和解压缩

    Java的`java.util.zip`包提供了压缩和解压缩的基础工具类,如`ZipOutputStream`、`ZipEntry`等。这些类可以用来创建ZIP格式的压缩文件。`ZipOutputStream`是实现文件压缩的关键类之一,它可以将多个文件写入到一个...

    java实现压缩与解压缩

    总之,Java提供了一套完整的API来处理文件的压缩和解压缩,无论是基础的ZIP和GZIP,还是通过第三方库实现的更多压缩格式。在实际开发中,了解并掌握这些工具和技巧对于优化文件存储和传输效率至关重要。

    Java实现压缩与解压缩功能源码

    这里我们将深入探讨如何使用Java实现这一功能,主要关注ZIP文件格式的压缩和解压缩。 首先,Java标准库提供了一个名为`java.util.zip`的包,它包含了处理压缩文件所需的类。其中,`ZipOutputStream`用于创建ZIP文件...

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

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

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

    压缩和解压缩过程中,需要将普通流转换为压缩流,以实现数据的压缩和解压缩。 7. **递归处理**:在压缩或解压缩整个目录时,通常需要递归处理子目录和其下的所有文件。这涉及到文件系统遍历和递归函数的使用。 8. ...

    java语言实现apk文件的压缩和解压缩

    在Java编程环境中,APK文件是Android应用的安装包,通常是`.apk`格式,它包含了应用的所有资源、代码和配置信息。本实例将探讨如何利用...总之,Java提供的`java.util.zip`库为处理压缩和解压缩任务提供了强大的支持。

    使用Java实现文件的压缩和解压缩.doc

    在Java编程中,实现文件的压缩和解压缩是一项常见的任务,这通常涉及到对`java.util.zip`包的使用。`ZipOutputStream`和`ZipInputStream`是Java标准库提供的两个关键类,它们分别用于文件的压缩和解压缩。然而,需要...

    7-Zip的LZMA压缩算法之Java源代码单文件版.doc

    该Java源代码实现了LZMA算法的压缩和解压缩过程,提供了一个完整的LZMA算法实现。 结论 该Java源代码实现了LZMA算法的核心逻辑,包括压缩和解压缩的实现。源代码中定义了多个常量和函数,用于控制压缩和解压缩的...

    java自带压缩方式的性能比较

    在`GzipUtils.java`和`ZipUtils.java`中,作者可能实现了一些功能,如压缩和解压缩的方法。这些方法可能使用了Java内置的`java.util.zip`包,其中`GZIPOutputStream`和`GZIPInputStream`对应Gzip操作,而`...

    Huffman 编码图像无损压缩和解压缩 Python示例代码 哈夫曼编码

    本程序实现了利用 Huffman 编码对图像进行无损压缩和解压缩。Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python ...

    java实现压缩解压缩

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

    Java压缩和解压缩zip文件

    本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先,我们要了解Java中处理ZIP文件的核心类:`java.util.zip.ZipOutputStream` 和 `java.util.zip....

    java实现rar压缩与解压缩

    以上就是`FileUtil.java`文件中可能实现RAR压缩和解压缩的核心代码片段。通过结合Apache Commons Compress库,开发者可以轻松地在Java应用程序中处理RAR格式的压缩和解压缩任务。这个库不仅支持RAR,还支持其他多种...

    Huffman 压缩解压缩 Java实现

    在提供的压缩包子文件“HuffmanCoding”中,可能包含了实现Huffman压缩和解压缩的Java源代码。通过阅读和理解这些代码,可以深入了解Huffman编码的具体实现细节。同时,可以尝试修改和优化代码,比如增加对二进制...

    java实现压缩和解压.doc

    在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或者需要在网络上传输数据时。本文将深入探讨如何使用Java实现这一功能,主要关注两种常用的压缩格式:ZIP和GZ。 首先,我们要引入Java的...

Global site tag (gtag.js) - Google Analytics