package com.dvnchina.itv.cps.utils.compress;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* 压缩文件类,支持添加文件或文件夹
*
* @author Teddy
*
*/
public class ZipUtil {
//文件打包下载
public static HttpServletResponse downLoadFiles(List<File> files,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try {
/**这个集合就是你想要打包的所有文件,
* 这里假设已经准备好了所要打包的文件*/
//List<File> files = new ArrayList<File>();
/**创建一个临时压缩文件,
* 我们会把文件流全部注入到这个文件中
* 这里的文件你可以自定义是.rar还是.zip*/
File file = new File("c:/certpics.rar");
if (!file.exists()){
file.createNewFile();
}
response.reset();
//response.getWriter()
//创建文件输出流
FileOutputStream fous = new FileOutputStream(file);
/**打包的方法我们会用到ZipOutputStream这样一个输出流,
* 所以这里我们把输出流转换一下*/
// org.apache.tools.zip.ZipOutputStream zipOut
// = new org.apache.tools.zip.ZipOutputStream(fous);
ZipOutputStream zipOut
= new ZipOutputStream(fous);
/**这个方法接受的就是一个所要打包文件的集合,
* 还有一个ZipOutputStream*/
zipFile(files, zipOut);
zipOut.close();
fous.close();
return downloadZip(file,response);
}catch (Exception e) {
e.printStackTrace();
}
/**直到文件的打包已经成功了,
* 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中,
* 稍后会呈现出来,接下来的就是往客户端写数据了*/
// OutputStream out = response.getOutputStream();
return response ;
}
/**
* 把接受的全部文件打成压缩包
* @param List<File>;
* @param org.apache.tools.zip.ZipOutputStream
*/
public static void zipFile
(List files,ZipOutputStream outputStream) {
int size = files.size();
for(int i = 0; i < size; i++) {
File file = (File) files.get(i);
zipFile(file, outputStream);
}
}
public static HttpServletResponse downloadZip(File file,HttpServletResponse response) {
try {
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}finally{
try {
File f = new File(file.getPath());
f.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
/**
* 根据输入的文件与输出流对文件进行打包
* @param File
* @param org.apache.tools.zip.ZipOutputStream
*/
public static void zipFile(File inputFile,
ZipOutputStream ouputStream) {
try {
if(inputFile.exists()) {
/**如果是目录的话这里是不采取操作的,
* 至于目录的打包正在研究中*/
if (inputFile.isFile()) {
FileInputStream IN = new FileInputStream(inputFile);
BufferedInputStream bins = new BufferedInputStream(IN, 512);
//org.apache.tools.zip.ZipEntry
ZipEntry entry = new ZipEntry(inputFile.getName());
ouputStream.putNextEntry(entry);
// 向压缩文件中输出数据
int nNumber;
byte[] buffer = new byte[512];
while ((nNumber = bins.read(buffer)) != -1) {
ouputStream.write(buffer, 0, nNumber);
}
// 关闭创建的流对象
bins.close();
IN.close();
} else {
try {
File[] files = inputFile.listFiles();
for (int i = 0; i < files.length; i++) {
zipFile(files[i], ouputStream);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
将文件打包成压缩文件,以及对压缩包的解压,方便好用。
我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示如何实现文件的解压缩功能。 首先,`java.util.zip`包提供了几个关键类,用于处理各种压缩格式,如`...
当我们需要将项目分发或共享给他人时,通常会将相关的Java文件打包成压缩文件,便于传输和下载。本篇将围绕“Java文件打包下载”这一主题,深入探讨相关知识点。 首先,我们要了解如何在Java中进行文件操作。Java...
J2EE常用工具类汇总 J2EE常用工具类—Value Object工具类 ...J2EE常用工具类—文件打包解包处理类 J2EE常用工具类——文件操作类 J2EE常用工具类——邮件处理类(javaMail发送邮件) J2EE常用工具类——字符串工具类
文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否...将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下 ,拷贝指定文件到另一文件中,保存图片
"java先压缩再下载工具类"是一个实用的工具集,它允许开发者将一组文件打包成ZIP格式,然后提供给用户下载。这个工具类包括了核心的压缩功能以及输入/输出操作,使得在Java应用程序中执行这样的任务变得更加便捷。 ...
标题提到的"exe4 把JAVA文件打包成EXE工具"是一种能够帮助开发者将Java项目转换为Windows平台下的可执行文件(.exe)的工具,它使得非Java环境的用户也能方便地运行Java应用程序。 **Java到EXE转换的原理:** Java...
Java文件打包是一个重要的过程,它将Java源代码及其相关资源组织成一个可执行的格式,以便用户能够方便地运行和分发。这个过程通常涉及到多个步骤,包括编译、构建和打包。以下是对这个主题的详细说明: 1. **Java...
### Java文件打包知识点详解 在Java开发过程中,经常会遇到需要将多个类文件、资源文件等进行打包处理的情况,以便于程序的部署与分发。本文将详细介绍如何通过命令行方式来实现Java文件的打包,并结合具体的示例...
在Java编程环境中,将多个Excel文件打包成ZIP文件并实现下载功能是一项常见的需求,尤其是在数据导出或批量处理场景中。下面将详细讲解这个过程涉及的主要知识点。 首先,我们需要了解Java中的`java.util.zip`包,...
为了解决这个问题,开发者可以使用特定的工具将JAR文件打包成可执行的Windows EXE文件,使得非Java环境的用户也能方便地运行程序。"JAVA打包EXE的工具"就是为此目的设计的。 "JAR TO EXE"是一个典型的例子,它允许...
packFileToZip可以将指定目录(tempFileDir)下的所有文件打包成指定zipName的压缩包,保存在tempZipDir中,然后再通过response获取流响应给前端,其中有使用到IOutil工具类,用于将文件通过流写入磁盘,请自行修改...
WriteLeadsOssUtils类是一个工具类,用于实现下载功能。该类中有一个私有构造函数,用于防止多线程并发bug,并使用AtomicLong来记录下载次数。writeJSONObjectFile方法用于将内容写入OSS,然后将下载链接返回给前端...
我们先来看看如何将多个文件打包成一个ZIP文件。 1. **打包文件到ZIP** - 首先,创建一个`ZipOutputStream`对象,它需要一个`FileOutputStream`作为参数,指定输出的ZIP文件路径。 - 然后,对于每个要打包的文件...
Java代码打包工具是开发者在开发过程中经常会用到的一种实用软件,它可以帮助我们将编写好的Java程序集合成可执行的文件,方便部署和分发。这里我们主要讨论的是Java应用程序的打包过程,包括JAR(Java Archive)...
在Java领域,有几个知名的打包工具可以将Java程序转换为EXE文件,其中包括Launch4j、JSmooth、Jar2Exe和Excelsior JET等。这些工具不仅能够生成EXE,还允许我们自定义各种参数,比如设置程序图标,控制启动选项,...
在Java编程中,将代码打包成可执行文件是常见的需求,尤其在分发软件或部署应用程序时。这个过程通常涉及到JAR(Java Archive)文件的创建,它是一种用于收集多个类文件、相关的元数据和资源文件的容器。下面将详细...
- 使用`jar cvfm jartest.jar test.txt`命令将所有文件打包进`jartest.jar`文件中。这里的`c`表示创建新的jar文件;`v`表示详细模式,显示添加到jar文件中的每个文件;`f`表示指定jar文件的名字;`m`表示使用指定的...
通过使用Java的jar命令或者集成开发环境(IDE)如IntelliJ IDEA或Eclipse的内置功能,可以将源代码编译后的.class文件和相关的资源文件打包成JAR包。JAR包本身并不能直接在Windows上作为可执行文件运行,但可以通过...
分享自己做的的打包工具,希望能帮助到平时为一堆补丁文件class(自动包含class内部类),jsp,html,js,css,xml,jar等文件花费很长时间整理的朋友,有了我这个工具,似乎这一切都变得简单,你只需要选择路径,然后在...