`

ZIP按照目录结果打包整个文件目录

阅读更多
public boolean downZipOrder(String sourceUrl,String purposeUrl){
		boolean flag=false;
		// 初始化支持多级目录压缩的ZipMultiDirectoryCompress
		ZipMultiDirectoryCompress zipCompress = new ZipMultiDirectoryCompress();
		// 压缩目录,可以指向一个文件
	//	String directory = ExcelUtil.DOC_DIR ;
		// 生成的压缩文件
	//	String destFile = "d:/all.zip";
		// 默认的相对地址,为根路径
		long start = System.currentTimeMillis();
		ZipOutputStream zos = null;
		try {
			// 创建一个Zip输出流
			zos = new ZipOutputStream(new FileOutputStream(purposeUrl));
			zos.setEncoding("GBK");
			// 启动压缩进程
			zipCompress.startCompress(zos, sourceUrl);
			flag=true;
		} catch (FileNotFoundException e) {
			flag=false;
			e.printStackTrace();
		} finally {
			try {
				if (zos != null)
					zos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println(System.currentTimeMillis() - start);
		return flag;
	}

 

public void startCompress(ZipOutputStream zos, String directory) {
		startCompress(zos, StringUtils.EMPTY, directory);

	}

	public void startCompress(ZipOutputStream zos, String oppositePath, String directory) {
		File file = new File(directory);
		if (file.isDirectory()) {
			// 如果是压缩目录
			File[] files = file.listFiles();
			for (int i = 0; i < files.length; i++) {
				File aFile = files[i];
				if (aFile.isDirectory()) {
					// 如果是目录,修改相对地址,apache解决了中文字符乱码问题。
					String newOppositePath = oppositePath + aFile.getName() + "/";
					// 创建目录
					compressDirectory(zos, oppositePath, aFile);
					// 进行递归调用
					startCompress(zos, newOppositePath, aFile.getPath());
				} else {
					// 如果不是目录,则进行压缩
					compressFile(zos, oppositePath, aFile);
				}
			}
		} else {
			// 如果是压缩文件,直接调用压缩方法进行压缩
			compressFile(zos, oppositePath, file);
		}
	}

	public void compressFile(ZipOutputStream zos, String oppositePath, File file) {
		// 创建一个Zip条目,每个Zip条目都是必须相对于根路径
		ZipEntry entry = new ZipEntry(oppositePath + file.getName());
		InputStream is = null;
		try {
			entry.setUnixMode(644);
			// 将条目保存到Zip压缩文件当中
			zos.putNextEntry(entry);
			// 从文件输入流当中读取数据,并将数据写到输出流当中.
			is = new FileInputStream(file);
			int length = 0;
			byte[] buffer = new byte[BUF_SIZE];
			while ((length = is.read(buffer, 0, BUF_SIZE)) >= 0) {
				zos.write(buffer, 0, length);
			}
			zos.closeEntry();
		} catch (IOException ex) {
			ex.printStackTrace();
		} finally {
			try {
				if (is != null)
					is.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}

	public void compressDirectory(ZipOutputStream zos, String oppositePath, File file) {
		// 压缩目录,这是关键,创建一个目录的条目时,需要在目录名后面加多一个"/"
		ZipEntry entry = new ZipEntry(oppositePath + file.getName() + "/");
		try {
			entry.setUnixMode(755);
			zos.putNextEntry(entry);
			zos.closeEntry();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

分享到:
评论

相关推荐

    将一个目录内的内容打包到zip文件以及将zip文件解压到某个目录(ZipPack).zip

    6. **目录操作**:为了将整个目录及其内容打包或解压,需要遍历目录结构,获取所有子文件和子目录。这通常涉及到递归函数或者文件系统遍历API的使用。 7. **错误处理**:在编程中,错误处理是必不可少的。在处理...

    asp文件打包成zip组件

    ASP(Active Server ...总的来说,"asp文件打包成zip组件"是ASP开发者用来便捷地处理文件打包需求的一种工具,它简化了在服务器端创建ZIP文件的过程,并且能够集成到现有的ASP应用程序中,提高了开发效率和用户体验。

    生成excel并打包成zip文件

    在IT行业中,生成Excel文件和将其打包成ZIP文件是一项常见的任务,特别是在数据处理、报表生成或文件传输等场景。这个任务通常涉及到编程语言中的文件操作和压缩库的使用。以下是对给定标题和描述中涉及知识点的详细...

    laravelexcelzip用于将一个大型Excel打包成Zip文件下载

    考虑到大型Excel文件可能导致内存溢出或者浏览器下载速度慢,这个库提供了一个巧妙的解决方案,即将Excel文件打包成ZIP格式进行下载。 `laravel-excel-zip`的主要功能在于,它允许开发者在内存管理可控的情况下,将...

    ATZ解包打包工具.zip_.atz_Atz文件 打包_Atz是什么文件_atz打包_千年ATZ

    这样的工具可能支持多种图像格式,并且具有预览功能,让用户无需先解压整个文件就能查看图片。 总的来说,ATZ文件打包工具是一个用于处理ATZ格式的实用程序,它具备打包和解包的功能,适合处理包含各种类型数据的...

    azkaban .bat 一件打包成 zip 脚本.zip

    描述提到,“只需将.gitignore和7zip.bat两个文件复制到需要打包的目录下,执行7zip.bat就能打包成azkaban需要的zip包”。这里包含几个关键知识点: 1. **.gitignore**:这是一个Git版本控制系统中的文件,用于指定...

    java Zip打包完整例子

    这是因为每次打包一个文件时,Java只需要处理较少的数据,而打包整个文件夹可能需要递归遍历所有子文件和子目录,这会增加计算量和时间。 6. `ant.jar`: 这是一个Ant构建工具的库文件,Ant是Apache组织提供的一个...

    Jenkins一键打包.zip

    本资料"Jenkins一键打包.zip"提供了关于如何配置Jenkins进行Unity3D项目自动打包的详细流程和相关文件。 首先,我们需要理解Jenkins的一键打包概念。一键打包是指通过预设的脚本或配置,在点击一个按钮后自动完成...

    文件转换为zip打包文件

    "文件转换为zip打包文件"是常见的操作之一,它能够将多个独立的文件或整个文件夹整合到一个单一的zip文件中。下面将详细阐述zip格式、打包过程以及其在实际应用中的优势。 首先,zip是一种流行的文件压缩格式,由...

    解压zip文件和复制一个目录下所有文件到另一个目录

    ZIP是一种常见的文件压缩格式,它允许将多个文件和目录打包成一个单一的可压缩文件。在C++中解压ZIP文件,通常需要借助第三方库,如 zlib 库(提供基础的压缩和解压缩功能)和 libzip 库(提供对ZIP文件的高级操作...

    文件打包压缩,可同时打包多个文件(也可以打包单个文件)

    此代码会创建一个名为 `output.zip` 的 ZIP 文件,包含 `file1.txt`、`file2.jpg` 和名为 `folder` 的整个目录及其内部文件。 标签中的"同时打包多个文件"和"压缩文件"指的是上述过程,即一次操作中处理多个文件并...

    java 打包文件(文件夹)为 zip压缩包 java 压缩文件

    在Java编程环境中,打包文件或文件夹到zip压缩包是一项常见的任务,这通常涉及到I/O操作和文件处理。`ZIPUtil`可能是一个自定义的工具类,用于简化这个过程。以下是一些关于如何在Java中实现这个功能的关键知识点: ...

    PHP_ZIP打包支持

    在PHP编程环境中,`ZIP`打包支持是一项非常实用的功能,它允许开发者将多个文件或整个目录打包成一个`.zip`文件,便于传输、存储或备份。`PHP ZIP`扩展是实现这一功能的关键,它提供了丰富的函数和类来处理`.zip`...

    php压缩zip文件(多级目录,自定义目录名)

    添加单个文件或整个目录,包括其下的所有子文件,可以使用`addFromString()`或`addFile()`。对于多级目录,需要递归处理。 ```php function addFilesToZip($dir, $rootPath, $zip) { $files = scandir($dir); ...

    aa.zip_LABVIEW打包文件_读取文件

    标题中的"aa.zip_LABVIEW打包文件_读取文件"指的是一个LabVIEW项目被打包成的zip文件,其中包含了与读取文件相关的功能。下面我们将深入探讨LabVIEW打包文件的原理以及如何处理读取文件的路径问题。 首先,LabVIEW...

    ZIP文件解压上传服务器

    ZIP是一种常用的文件压缩格式,它能将多个文件或目录打包成一个单一的压缩文件,便于存储和传输。在Java中,我们可以使用`java.util.zip`包中的类来处理ZIP文件。 1. **读取和解压ZIP文件**: - 使用`java.io....

    ZIP打包代码

    6. **流式处理**:在某些情况下,我们可能需要在不完全加载整个文件到内存的情况下进行ZIP打包,这时就需要使用流式处理。例如,可以读取文件的一部分,压缩后写入ZIP文件,然后再继续读取下一部分,直到文件结束。 ...

    rez打包解包.zip

    4. 最后,将打包好的资源文件替换到游戏的安装目录,覆盖原有的文件,使改动生效。 在使用rez工具时,需要注意版权问题,因为擅自修改游戏内容可能会违反游戏的用户协议。此外,由于rez工具涉及到游戏内部资源的...

    java 操作Zip文件(压缩、解压、加密).zip

    - **压缩任务**:Ant中的`zip`任务可以用于创建Zip文件,你可以指定要打包的文件和目录,甚至可以设置压缩级别。 - **解压缩任务**:使用`unzip`任务可以解压缩Zip文件到指定的目标目录。 - **Ant脚本**:Ant通过...

    thinkphp5项目打包.zip

    本项目打包文件“thinkphp5项目打包.zip”包含了一个完整的ThinkPHP5线上项目,其中涵盖了Ajax无刷新分页和多条件搜索的实现,是学习和理解TP5框架及Ajax技术的良好实践案例。 一、ThinkPHP5框架简介 ThinkPHP5的...

Global site tag (gtag.js) - Google Analytics