前几天因为项目需要 做了一个导出 是在Oracle中blob字段导出数据生成word 然后再下载到客户端
blob为一个特殊字段 可以保存4G的数据 包括图片、视频等
/**
* @功能信息 :导出Word文档
* @参数信息 :outfile:文件路径,id:文档编号
* @返回值信息 :
* @异常信息 :
*/
public boolean readDoc(String outfile, String id) throws Exception {
DbaObj = new DBstep.iDBManager2000(); // 创建数据库对象
FileOutputStream fos = null;
InputStream is = null;
boolean mResult = false;
String Sql = "SELECT FileBody,FileSize FROM info_document_file WHERE RecordID='"
+ id + "'";
try {
if (DbaObj.OpenConnection()) {
try {
ResultSet result = DbaObj.ExecuteQuery(Sql);
if (result.next()) {
try {
int fileSize = result.getInt("FileSize");
Blob blob = result.getBlob("FileBody");
file = new File(outfile);
if (!file.exists()) {
file.createNewFile();// 如果文件不存在,则创建
}
fos = new FileOutputStream(file);
is = blob.getBinaryStream();// 读出数据后转换为二进制流
byte[] data = new byte[fileSize];
int size = 0;
while ((size = is.read(data)) != -1) {
fos.write(data, 0, size);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
result.close();
mResult = true;
} catch (SQLException e) {
e.printStackTrace();
mResult = false;
}
}
} finally {
DbaObj.CloseConnection();
fos.close();
is.close();
}
return (mResult);
}
注:因为用到了第三方控件 所以这块未使用Hibernate 以后有时间 可以进行修改
/**
* 导出功能
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward export(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
List list = new ArrayList();
// 生成随机文件名
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyymmddhhmmss");
String result = format.format(new java.util.Date());
ReportForm report = (ReportForm) form;
String[] exportlist = report.getIds();
//String str = "导出失败";
String path = request.getRealPath("/") + "upload/";
for (int i = 0; i < exportlist.length; i++) {
if (readDoc(path + exportlist[i] + ".doc", exportlist[i])) {
//str = "导出成功";
list.add(exportlist[i] + ".doc");
// download("http://localhost:8080/infoOA/upload/"+exportlist[i]+".doc",exportlist[i]+".doc");
}
}
// 先生成zip为文件 再删除doc文件
getZip(list, path, result);
for (int i = 0; i < exportlist.length; i++) {
deleteFile(new File(path+exportlist[i] + ".doc"));
}
downLoad(result, path, response);
//删除zip文件
deleteFile(new File(path+result+ ".zip"));
//request.setAttribute("message", str);
return null;
}
/**
* 压缩文件zip
* @功能信息 :
* @参数信息 :
* @返回值信息 :
* @异常信息 :
*/
public void getZip(List list,String path,String fileName) throws Exception{
byte[] buffer = new byte[1024];
String strZipName = fileName + ".zip";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(path
+ strZipName));
for (int j = 0; j < list.size(); j++) {
String name = list.get(j).toString();
FileInputStream fis = new FileInputStream(path + name);
out.putNextEntry(new ZipEntry(name));
int len;
while ((len = fis.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.closeEntry();
fis.close();
}
out.close();
System.out.println("生成Demo.zip成功");
}
/**
* 文件下载
*
* @功能信息 :
* @参数信息 :
* @返回值信息 :
* @异常信息 :
*/
public void downLoad(String fileName,String path, HttpServletResponse response) throws IOException {
String strZipName = fileName + ".zip";
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream os = null;
InputStream is = null;
try {
File file = new File(path + strZipName);
if (!file.exists()) {
System.out.println("文件不存在");
}
is = new FileInputStream(file);
bis = new BufferedInputStream(is);
os = response.getOutputStream();
bos = new BufferedOutputStream(os);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("application/x-msdownload;charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename="
+ URLEncoder.encode(strZipName, "utf-8"));
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
is.close();
bis.close();
os.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除文件信息 根据boolean类型判断文件是否存在
*
* @param file
*/
private boolean deleteFile(File file) {
if (file.exists()) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
File files[] = file.listFiles();
for (int i = 0; i < files.length; i++) {
this.deleteFile(files[i]);
}
}
file.delete();
return true;
} else {
return false;
}
}
分享到:
相关推荐
在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...
在Java后台中,批量下载文件压缩成zip下载可以使用Java的文件输入输出流和zip压缩流来实现。首先,需要在Servlet中获取文件列表,然后使用循环将文件一个个添加到zip文件中,最后下载zip文件到本地桌面。 java批量...
本文主要介绍如何使用Java实现文件的ZIP压缩功能,并提供了完整的代码示例。通过学习本文,你可以掌握以下几个知识点: 1. 使用`java.util.zip`包中的类进行文件压缩。 2. 如何创建ZIP输出流并写入文件数据。 3. ...
在Java编程语言中,我们...总的来说,Java中的ZIP压缩和解压缩功能强大且易于使用,是开发人员处理文件压缩需求的首选工具。通过熟练掌握`java.util.zip`包,你可以轻松地在Java应用程序中实现文件的压缩和解压缩功能。
Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...
通过以上步骤,我们成功地实现了一个简单的Spring Boot服务,该服务能够在接收到特定请求时将多份文件打包成ZIP压缩文件并提供给用户一次性下载。这种方式不仅极大地提升了用户体验,还简化了服务器端的处理逻辑。...
### Java 实现ZIP压缩文件详解 #### 一、概述 在日常开发工作中,对文件进行压缩处理是一项常见的需求。本文将详细介绍如何使用Java语言来实现文件或文件夹的ZIP格式压缩。通过本教程,读者可以了解到Java标准库...
在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...
以下是一份详细的介绍,讲解如何利用Java来实现ZIP文件的压缩和解压缩功能。 首先,我们要理解ZIP文件格式。ZIP是一种广泛使用的文件归档格式,它能将多个文件或目录打包成一个单一的ZIP文件,方便存储和传输。在...
本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...
本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...
在压缩和解压缩过程中,需要考虑保留文件的原始权限和属性,这可以通过设置ZipEntry的额外字段来实现。 10. **安全性** 当处理来自不可信来源的ZIP文件时,应小心潜在的安全风险,如路径遍历攻击(Path Traversal...
3. **压缩过程**:首先,我们需要创建一个`ZipOutputStream`,然后为每个要压缩的文件创建一个`ZipEntry`,设置其密码,然后将其写入`ZipOutputStream`。最后,关闭`ZipOutputStream`以完成写入。 4. **解压过程**...
在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...
应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包
Java文件分割压缩是一种常见的操作,尤其在处理大数据或者网络传输时非常有用,因为单个大文件可能会导致处理效率低或传输困难。以下是一些相关的Java编程知识点: 1. **文件I/O操作**:在Java中,`java.io`包提供...
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
通过以上步骤,可以实现Java环境下从MinIO服务器批量下载文件并压缩为ZIP包的功能,这对于数据迁移、备份和分发场景非常有用。在实际开发中,还需要考虑错误处理、并发下载优化、资源管理等细节,以确保程序的稳定性...
在Java编程语言中,生成ZIP压缩文件是一项常见的任务,它涉及到文件操作和数据流的处理。这个过程可以用于归档多个文件或者整个目录结构,便于存储或传输。下面我们将详细探讨如何使用Java来生成ZIP压缩文件,以及...