`

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

 

分享到:
评论

相关推荐

    Jenkins一键打包.zip

    Jenkins一键打包流程示意, 以及Jenkins响应的配置文件和unity3d工程源码。 简单设置之后可以直接实现打包操作。

    通达OA2010个人文件柜整目录(包含子目录)上传补丁

    在目录上传之前需要用户将需上传的所有目录打包成RAR或ZIP,然后上传到服务器,服务器会解压打包文件,并按照目录结构把文件、子目录依次插入到个人文件柜的当前目录下。所以服务器上PHP需要zip与rar的扩展,附件内...

    ID&WLC文件管理

    0,支持用户登陆和退出管理1,建立目录2,建立文件3,删除文件或者目录(整个目录)4,文件改名5,可同时上传8个文件6,在线文件编辑7,可更改文件属性8,可拷贝整个目录(注意,是拷贝里面的文件,如你选的是images...

    Linux文件的压缩与打包

     文件打包,是将多个文件或者整个目录合并成一个文件,用来进行文件的备份、分发、传输等。与文件压缩不同指出在于没有对文件进行压缩操作  Linux支持的压缩格式  *.Z compress 程序压缩文件  *.gz gzip...

    zip命令 压缩文件

    可以使用一个命令将整个目录结构打包到zip存档中。 对于文本文件来说,压缩比为2:1和3:1是常见的。zip只有一种压缩方法(通缩),并且可以在不压缩的情况下存储文件。(如果添加了bzip 2支持,zip也可以使用bzip 2...

    rar压缩软件.rar

    更新打包到压缩文件后被改变的文件。这个命令不 向压缩文件中添加新文件。 i[i|c|h|t]=&lt;字符串&gt; 在压缩文件中查找字符串。 支持下列可选参数: i - 不区分大小写(默认); c - 区分大小写搜索; h - 十六...

    php在线压缩代码zip

    可在线压缩网站某文件夹或者打包整个网站,方便备份网站文件并下载

    Android渠道打包工具packer-ng-plugin.zip

    实现起来也不复杂,就是为了提高性能,避免读取整个文件,需要在注释的最后加入几个MAGIC字节,这样从文件的最后开始,读取很少的几个字节就可以定位 渠道名的位置。几个常量定义:// ZIP文件的注释最长65535个...

    php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文:PHP如何实现...如果不指定的话,就会将整个文件全部写入内存当中,再一次性的讲数据传送给客户端 通过feof()函数,可以判断要读取的文件

    Python保留格式复制多个excel工作表到汇总表并生成目录.zip

    这个Python源码实现了将多个Excel工作表保留格式地复制到一个汇总表中,并生成一个包含所有工作...最后,将整个目录打包成一个ZIP文件。这个自动化办公工具可以帮助用户快速整理和归档大量的Excel数据,提高工作效率。

    openface_x64_release.zip

    VS2017 编译的 openface 可执行文件。exe直接可用,Landmark, Eye gaze, Head pose, Union recognition.

    Roundcube打包下载插件

    Roundcube打包下载插件.zipdownload作为压缩文件下载所有附件。通过可选选定的邮件或整个文件夹下载功能.

    Zipper-IntelliJ-Plugin:拉链增加了将整个项目打包到单个ZIP文件中的功能

    拉链IntelliJ插件 Zipper增加了将整个项目打包到单个ZIP文件中的功能。 真正快速创建备份的理想选择。 只需选择菜单&gt;工具&gt;打包整个项目,或按CTRL + SHIFT + P即可。

    全能文件管理器安卓版 Total Commander 3.0 中文多语免费版.zip

    此外,.apk 文件会重新打包为 .bar 文件(BlackBerry 安装程序)。 安卓版 Total Commander 中文版安卓版 Total Commander 中文版 Total Commander 主要特点 : –复制,移动整个子目录 –拖放(长按文件图标,...

    基于双目的人体姿态匹配与识别C++源码+项目说明(毕业设计项目).zip

    ##运行说明 程序都是用vs2015+opencv2.4.9.opencv已打包在内 在matchAndRecognition里面训练文件夹是我整理好的图片数据 Script文件夹是python文件,里面HumanActionRecognitionTrain.py是整个的训练文件,...

    TabBars---VC6 IDE增强插件

    打包整个工作区 选择压缩文件的输出位置,单击“确定”按钮就可以了。由于代码所在目录通常还有VC编译生成的临时文件,用户还可以选择打包过程中排除这些文件,在“打包压缩设置”窗口中可以设置文件选择方式: ...

    服务器数据同步 服务器端 cwRsync_Server_2.1.5_Installer.zip

    4、可以自动备份整个目录下的所有文件(包括子目录)。 5、可以只备份已经更新过的文件,加快备份速度。 6、可以自动删除源目录中没有的文件和目录(实现源目录与目的目录的同步) 7、详尽的备份日志清单,...

    绿环FTP数据备份软件 1.4 绿色版 可以用服务器数据同步.zip

    4、可以自动备份整个目录下的所有文件(包括子目录)。 5、可以只备份已经更新过的文件,加快备份速度。 6、可以自动删除源目录中没有的文件和目录(实现源目录与目的目录的同步) 7、详尽的备份日志清单,...

    Inno Setup 提取工具 Inno Setup Unpacker 0.50 免费版.zip

    习惯使用的打包工具就是 Inno Setup,而 Inno Setup 是用于安装软件的流行程序。不幸的是,没有官方的解压程序-将文件从自解压的可执行文件中取出的...现在,如果将 program.exe 复制到另一个位置,将创建整个目录树

Global site tag (gtag.js) - Google Analytics