`

java 实现文件压缩和解压缩

阅读更多

实现了文件的简单压缩、解压缩。主要测试用的里面有一些可能写的比较仓促,如有不适之处还望不吝赐教。

1.解决了中文的问题,应用的不是jdk中的包,而是应用的ant.jar

 代码:

  

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileFilter;
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 org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test test = new Test(); 
		//test.unzipFiles("D:/xmlZipFils/test.zip");
		test.zipFiles();
	}
	
	/**
	 * 压缩文件
	 */
	public void zipFiles(){
		File fromFiles = new File("d:\\table2xml");
		 if(!fromFiles.exists()){
			 fromFiles.mkdirs();
		 }
		 try {
			//输出流
			 OutputStream os = new FileOutputStream("D:\\xmlZipFils\\test.zip");
			 ZipOutputStream zipos = new ZipOutputStream(os);
			 File  file = null;
			 ZipEntry zipEntry = null;
			 InputStream inputStream = null;
			 File[] files = fromFiles.listFiles(new FileFilter(){
					public boolean accept(File pathname) {
						// TODO Auto-generated method stub
						boolean flag = false;
						if(pathname.getName().indexOf("桥接测试@weibainju_1181")!=-1){
							flag = true;
						}
						return flag;
					}					
				 });
			 doFiles(files,zipos,true);
			 zipos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 压缩时对文件和目录进行处理
	 * @param 某目录下面的所有文件和目录
	 * @param zip数出流
	 * @param 是否是要压缩的顶级目录
	 */
	public static void  doFiles(File[] files,ZipOutputStream zipos,boolean isFrist){
		InputStream inputStream =null;
		ZipEntry zipEntry = null;
		try {
			for(int i =0;i<files.length;i++){	
				 if(!files[i].isDirectory()){				 
					 inputStream = new FileInputStream(files[i]);
					 if(isFrist==false){
					    zipEntry = new ZipEntry(files[i].getParentFile().getName()+File.separatorChar+files[i].getName());
					 }else{
						 zipEntry = new ZipEntry(files[i].getName()); 
					 }
					 zipos.putNextEntry(zipEntry);
					 int count =0;
					 while((count=inputStream.read())!=-1){
						 zipos.write(count);
					 }		
					 inputStream.close();
				 }else{
					 File[] files1 = files[i].listFiles();
					 doFiles(files1,zipos,false);
				 }				 
			 }			 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 解压缩文件
	 */
  public  void unzipFiles(String zipFilePath){
	  String outDir = "d:/unzipXml";
	  try {
		File unzipDir = new File(outDir);
		  ZipFile unzipFile = new ZipFile(zipFilePath);
		  Enumeration e = unzipFile.getEntries();
		  InputStream  zipis = null;
		  ZipEntry zipEntry;
		  while(e.hasMoreElements()){
			  zipEntry = (ZipEntry) e.nextElement();
			  zipis =  unzipFile.getInputStream(zipEntry);
			  if(zipEntry.isDirectory()){
				  File file = new File(outDir,zipEntry.getName());
				  if(!file.exists()){
					  file.mkdirs();
				  }
			  }else{
				  if(zipEntry.getName().indexOf("/")>0){
					File file = new File(outDir+File.separatorChar+zipEntry.getName().substring(0,zipEntry.getName().indexOf("/")));
					if(!file.exists()){
						file.mkdirs();
					}
				  }
			      File file = new File(outDir,zipEntry.getName());			      
		          OutputStream os = new FileOutputStream(file);
		          DataOutputStream dos = new DataOutputStream(os);              
		          int count = 0;
		          while((count = zipis.read())!=-1){
		        	    dos.write(count);
		          }
		          zipis.close();
		          os.close();
		          dos.close();
			  }
		  }		  		 
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
  }
}

 

 

本人原创。欢迎转载!

分享到:
评论

相关推荐

    java 实现huaffman压缩和解压缩

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

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

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

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

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

    JAVA文件压缩与解压缩实践(源代码+LW).zip

    "JAVA文件压缩与解压缩实践(源代码+LW)"包含了使用Java实现文件压缩和解压缩的完整流程,同时附带了相关说明文档。 1. **Java压缩库**:Java标准库提供了一个名为`java.util.zip`的包,包含了一系列类用于文件和...

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

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

    文件压缩,解压(java实现)

    Java作为一种广泛应用的编程语言,提供了多种实现文件压缩和解压缩的API。本篇将详细介绍如何在Java中实现文件的非加密压缩、加密压缩以及相关的工具方法。 一、非加密压缩 Java中的`java.util.zip`包提供了对ZIP和...

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

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

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

    1. **Java压缩库**:Java标准库提供了`java.util.zip`包,它包含了多种压缩和解压缩的类,如`ZipOutputStream`、`ZipInputStream`、`GZIPOutputStream`和`GZIPInputStream`,用于处理ZIP和GZIP格式的文件。...

    java文件分割压缩

    6. **类的设计**:`Work5`, `Work5_new`, `OneTest`, `JieMu`等可能是实现文件分割和压缩功能的具体类。它们可能包含了主函数、方法以及一些辅助类来完成文件处理任务。 7. **测试**:`OneTest`类很可能包含了单元...

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

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

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

    在实际项目中,根据具体需求,可以选择合适的方法或库来实现文件的压缩和解压缩。务必注意处理异常,确保资源的正确关闭,以避免数据丢失或内存泄漏等问题。同时,为了提高性能,可以考虑使用缓冲流和多线程来优化...

    java压缩和解压缩

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

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

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

    使用Huffman对文件进行压缩和解压缩

    7. **HuffmanTest**:这个文件名可能是一个测试类,用于实现上述的压缩和解压缩过程。在Java中,可以使用`java.io`和`java.nio`包下的类进行文件操作,使用`java.util`包下的数据结构辅助实现Huffman算法。 实现...

    java实现rar压缩与解压缩

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

    java压缩和解压缩文件

    Java编程语言提供了丰富的库来处理文件的压缩和解压缩任务,这主要归功于Java标准库中的`java.util.zip`包。在这个包中,我们有`ZipOutputStream`和`ZipInputStream`类用于创建和读取ZIP文件,以及`GZIPOutputStream...

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

    在Java中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。 1. **压缩API**:在Java中,`java.util.zip`包提供了多个类用于处理压缩文件,如`ZipOutputStream`用于创建ZIP文件,`...

    Java压缩和解压缩zip文件

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

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

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

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

    压缩API:Java提供了java.util.zip和java.util.jar包来实现文件的压缩和解压缩操作。 压缩算法:通过选择不同的压缩算法,如DEFLATE算法用于ZIP格式,实现对文件的压缩。 流操作:使用Java的输入输出流(InputStream...

Global site tag (gtag.js) - Google Analytics