假设,在多用户的时候,一个用户刚好点导出excel准备下载.另外一个用户也点导出excel.这个时候后面那个用户产生的临时excel文件将覆盖前面那个用户产生的.很明显,这样的话第一个用户生成的excel文件将是第二个用户生成的.错误不可避免...
解决这个问题的办法有两个.第一个,根绝临时文件..就是在产生输入流的时候不用临时文件...这样当然就不会有上面所说的问题..第二个办法是,产生的临时文件是随机命名的...当用户下载完成以后删除这个临时文件...这样的话产生冲突的概率几乎为零.(下面我们将用62种字符字符组成10位字符串作为文件名..产生同名的概率只有六十二的十次方分之一.可以说根本就是0概率) ]
两种方法struts.xml的共同配置:
<result name="exportFile" type="stream">
<!-- 指定下载文件的文件类型 -->
<param name="contentType">
application/vnd.ms-excel
</param>
<!-- 指定下载文件的文件位置 -->
<param name="inputName">downloadFile</param>
<param name="contentDisposition">
attachment;filename="${downloadFileName}"
</param>
<!-- 指定下载文件的缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
第二种方法:
将创建好的 HSSFWorkbook workbook通过输出流写入exportfile文件里
//然后再通过exportfile产生输入流
public InputStream getDownloadFile() {
try {
downloadFile = new FileInputStream(new File(downloadPath));
} catch (Exception e) {
logger.error(e);
e.printStackTrace();
return null;
}
return downloadFile;
}
this.downloadFileName = "club.xls";//获得文件名
File file = new File(this.downloadFileName);//创建文件
this.downloadPath = file.getAbsolutePath();//得到文件绝对路径
//....以下写入创建的excel表(workbook)....//
FileOutputStream fw = new FileOutputStream(exportfile); //建立输出流
workbook.write(fw);//将excel写入文件
fw.flush();
fw.close();
第一种方法:
这里,我们使用了ByteArrayOutputStream和 ByteArrayInputStream类...处理的思想是,将HSSFWorkbook 写入ByteArrayOutputStream.然后用ByteArrayOutputStream来转换为字节流..然后再将字节流转换为 ByteArrayInputStream ..至此,我们就在内存中将excel转换成了输入流..
代码如下
ByteArrayOutputStream os = new ByteArrayOutputStream();
//....此处写入创建的excel表(workbook)....//
try {
wb.write(os);
} catch (IOException e) {
e.printStackTrace();
}
byte[] b = os.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(b);
return in;
然后把in传给this.setDownloadFile(in); 同样需要定义this.downloadFileName="club.xls";
public InputStream getDownloadFile() {return downloadFile;}
创建excel表:
HSSFWorkbook workbook = new HSSFWorkbook();//创建工作薄
HSSFSheet sheet = workbook.createSheet();//创建工作表
sheet.setDefaultColumnWidth((short) 20);//设置工作表宽度
HSSFRow bodyRow = sheet.createRow(i);//创建第i行
HSSFCell cell = bodyRow.createCell(j);//创建第j列的单元格
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue(value);
读取excel表:
FileInputStream fileStream = new FileInputStream(getUpload());//将文件写入缓冲
POIFSFileSystem poiFs = new POIFSFileSystem(fileStream);
HSSFWorkbook wb = new HSSFWorkbook(poiFs);
HSSFSheet sheet = wb.getSheetAt(0);// 根据excel下标名称获得对应的sheet.也可以
wb.getSheetAt("0");就是取Excel中的第一个sheet
int lastRowNum = sheet.getLastRowNum();// 获得总共有多少行数据
row.getLastCellNum();// 获得一行有多少单元格
HSSFRow row = sheet.getRow(i);// 获得第i行
HSSFCell cell = row.getCell((short)j);// 获得j列单元格数据
List<HSSFCell> cellList = new ArrayList<HSSFCell>();
cellList.add(cell);//采用两for循环,将一行的数据add进cellList
Schedule sch = new Schedule();
sch.setStartdate((String)this.getCellString(cellList.get(0)));//挨个set进Schedule表
注:具体在ScheduleSet.java?action=upExcel;
分享到:
相关推荐
struts2导出excel java 导出excel: JXL_excel: 可以直接在elipse下运行的例子 可以直接导出excel文件(包含所需的jar包) CSharpJExcel: 是JXL的官方下载的 包括详细的文档 和jar包
在Struts2框架中,实现Excel导出的功能主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。以下将详细介绍如何利用Struts2和POI实现Excel导出。 首先,你需要在项目中引入Apache POI库。...
在Struts2中,导出Excel是常见的需求,通常用于数据报表或数据分析。这篇笔记将探讨如何在Struts2中实现Excel的导出功能。 首先,我们需要了解Excel的基本概念。Excel是由Microsoft开发的一款电子表格软件,广泛...
接下来,我们创建一个Struts2的动作类(Action),在这个类中定义导出Excel的方法。这个方法通常会接收一些参数,如查询条件,然后根据这些条件从数据库或其他数据源获取数据。例如: ```java public class ...
本压缩包"struts2导出excel.rar"提供了关于如何在Struts2框架中实现Excel导出功能的相关资源。 1. **Struts2框架基础** Struts2是一个基于MVC(Model-View-Controller)设计模式的Java框架,它简化了MVC的实现,...
标题中的“POI+struts2导出Excel”是指使用Apache POI库与Struts2框架结合,实现在Web应用程序中导出数据到Excel的功能。Apache POI是Java平台上的一个开源项目,它允许开发者创建、修改和显示Microsoft Office格式...
在Struts2中,Action可以通过Result返回不同的视图,比如JSP、XML或流文件,这正是我们导出Excel所需的。 接下来,我们引入Apache POI。POI提供了读写Microsoft Office文件的API,对于Excel,主要使用HSSFWorkbook...
在这个“Struts1.2导出Excel表完美版”中,我们将深入探讨如何利用Struts1.2框架来实现这一功能。 首先,导出Excel表的核心技术是Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。在Struts1.2...
**JSP Struts2 分页 导出Excel** 在Web开发中,经常需要处理大量数据,这时分页显示和导出功能就显得尤为重要。JSP(JavaServer Pages)和Struts2作为Java Web开发中的常见技术,可以帮助我们构建动态、交互的网页...
首先,导出Excel是Web应用中常见的需求,通常用于报表生成或数据批量下载。在Struts2中,我们可以利用Apache POI库来操作Microsoft Office的XML格式,进而创建Excel文件。 1. **Apache POI库的使用**:Apache POI是...
本篇文章将深入探讨如何在Struts2框架中使用POI库来导出Excel文件。 首先,我们需要在项目中引入Apache POI库。可以通过Maven或Gradle将其添加到构建文件中。对于Maven,可以在pom.xml文件中添加以下依赖: ```xml...
6. **Struts2配置**: 配置Struts2的action,定义导出Excel的方法,并在struts.xml中配置相应的结果类型,如stream,以便能正确处理返回的流。 7. **安全性考虑**: 在实际应用中,要考虑文件名的安全性,防止路径...
Struts1.2 + ExtJS + 导出Excel项目是一个基于Web的应用开发框架组合,用于构建企业级的Java应用程序。这个项目的重点在于整合Struts1.2(一个经典的MVC框架)与ExtJS(一个富客户端JavaScript库)来提供用户友好的...
在实际项目中,我们经常需要提供文件下载功能,比如导出Excel表格、文本文件或者图片。Struts2提供了文件流的方式来实现这一需求,这种方式避免了在服务器上生成临时文件,提高了效率并减少了服务器存储空间的占用。...
本教程将深入探讨如何利用Struts2实现从Oracle数据库导出数据到Excel,以及如何将Excel文件中的数据导入到Oracle。 首先,我们需要了解Oracle数据库的基础知识。Oracle是世界上最广泛使用的商业关系型数据库管理...
这个项目"Java Struts2+poi插件 实现导出Excel"就是结合这两个工具,为用户提供一个功能,能够将数据导出到Excel格式的文件中。 首先,让我们详细了解一下Struts2。Struts2的核心是Action,它负责接收请求、处理...
Struts2 框架与 Apache 的 JXL 库整合,可以方便地实现在 Java Web 应用中导入和导出 Excel 表格的功能。Apache JXL 是一个强大的 Java 库,专门用于读写 Microsoft Excel 文件,使得开发者无需依赖 Office API 就能...
在 Java 开发中,如果你需要导出数据到 Excel,Apache POI 提供了高效的 API 来实现这一功能。在本文中,我们将深入探讨如何使用 POI 组件来创建和操作 Excel 文档。 1. **创建 Excel 文档对象** 创建一个 Excel ...
Struts2 和 Apache POI 的结合使用主要集中在创建 Web 应用程序中导出 Excel 文件的功能上。Apache POI 是一个 Java 库,允许开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 Excel。而 Struts2 是一...