`

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();
	}
  }
}

 

 

本人原创。欢迎转载!

分享到:
评论

相关推荐

    6-10.py

    6-10

    基于机器学习的入侵检测系统+源码+说明.zip

    基于机器学习的入侵检测系统+源码+说明.zip

    matlab基于潜在低秩表示的红外与可见光图像融合.zip

    matlab基于潜在低秩表示的红外与可见光图像融合.zip

    4-5.py

    4-5

    基于tensorflow使用简单线性回归实现波士顿房价预测源码.zip

    基于tensorflow使用简单线性回归实现波士顿房价预测源码.zip

    setuptools-25.1.0-py2.py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pytest-8.0.0-py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pytest-2.1.2.zip

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    GDAL-3.2.2-cp38-cp38-win-amd64.whl

    GDAL-3.2.2-cp38-cp38-win_amd64.whl

    3-11-1.py

    3-11-1

    Scrapy-2.5.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    课程大作业二手车价格预测案例数据挖掘python源码+数据集+实验报告+详细注释.zip

    课程大作业二手车价格预测案例数据挖掘python源码+数据集+实验报告+详细注释.zip

    setuptools-24.0.3-py2.py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pytest-6.2.1-py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡—xx科技业务流程改造报告.ppt

    麦肯锡—xx科技业务流程改造报告.ppt

    麦肯锡—xx阶段一报告.ppt

    麦肯锡—xx阶段一报告.ppt

    基于MPC模型预测控制从原理到代码的matlab实现源码+文档说明.zip

    基于MPC模型预测控制从原理到代码的matlab实现源码+文档说明.zip

    setuptools-35.0.0-py2.py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Vue中实现鼠标悬浮显示提示框通常使用的是.docx

    vue鼠标悬浮显示提示框

    setuptools-0.6c10-py2.4.egg

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics