- 浏览: 991691 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
一.POI 简介
Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API
目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。
二.HSSF概况
HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。
三.开始编码
可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi / 最新的POI 工具包
HSSFWorkbook excell 文档对象介绍
HSSFSheet excell的表单
HSSFRow excell的行
HSSFCell excell的格子单元
HSSFFont excell字体
HSSFName 名称
HSSFDataFormat 日期格式
在poi1.7中才有以下2项:
HSSFHeader sheet头
HSSFFooter sheet尾
和这个样式
HSSFCellStyle cell样式
辅助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
(以上部分转自http://ltc603.iteye.com/blog/30184)
在我们在Service编写操作如下:
package com.mengya.service.imple; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.apache.commons.lang.RandomStringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.mengya.dao.UsersDaoInter; import com.mengya.entity.Users; import com.mengya.service.UsersServiceInter; public class UsersService implements UsersServiceInter { private UsersDaoInter usersdao = null; public void setUsersdao(UsersDaoInter usersdao) { this.usersdao = usersdao; } @SuppressWarnings("unchecked") public InputStream exportUsers() { // 创建一个HSSFWorkbook HSSFWorkbook wb = new HSSFWorkbook(); // 由HSSFWorkbook创建一个HSSFSheet HSSFSheet sheet = wb.createSheet(); // 由HSSFSheet创建HSSFRow HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell((short) 0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("序号"); cell = row.createCell((short) 1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("姓"); cell = row.createCell((short) 2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("名字"); cell = row.createCell((short) 3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("年龄"); List<Users> userList = this.findAll(); for (int i = 0; i < userList.size(); i++) { Users user = userList.get(i); row = sheet.createRow(i + 1); cell = row.createCell((short) 0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(i+1); cell = row.createCell((short) 1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getUfristName()); cell = row.createCell((short) 2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getUlastName()); cell = row.createCell((short) 3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getUage()); } //方法一:生成xls文件到硬盘上,然后再删除该文件(启动一个线程或Servlet启动时删除) //自己的方法产生随机的字符串作为文件名 //参见(http://zmx.iteye.com/admin/blogs/477460) //String fileName=RandomFileName2.getRandomString(10); //使用apache的commons-lang.jar产生随机的字符串作为文件名 String fileName=RandomStringUtils.randomAlphanumeric(10); //生成xls文件名必须要是随机的,确保每个线程访问都产生不同的文件 StringBuffer sb=new StringBuffer(fileName); final File file = new File(sb.append(".xls").toString()); try { OutputStream os=new FileOutputStream(file); try { wb.write(os); os.close(); } catch (IOException e) { } } catch (FileNotFoundException e) { e.printStackTrace(); } InputStream is=null; try { is=new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } //生成一个线程,splee15秒删除该文件 new Thread(new Runnable(){ public void run() { try { Thread.sleep(15000); } catch (InterruptedException e) { e.printStackTrace(); } file.delete(); } }).start(); return is; } }
对于上面的方法如果服务器停止可能导致有些文件没有删除可能会越来越多,对于tomcat该文件放在tomcat的bin目录中。故我们可以用一个Servlet在服务器启动时删除这些垃圾文件。Servlet如下:
/** * 服务器启动时清除服务器中的垃圾文件 * * @author 张明学 * */ @SuppressWarnings("serial") public class DeleteExlFileServlet extends HttpServlet { public void destroy() { super.destroy(); } public void init() throws ServletException { /**第一种方式删除 * File file = new File(".");对于tomcat得到的是bin目录 File file = new File("."); File[] subFiles = file.listFiles(); for (File f : subFiles) { if (f.getName().endsWith(".xls")) { f.delete(); } } **/ File file = new File("."); File[] subFiles = file.listFiles(new FileFilter() { public boolean accept(File pathname) { if (pathname.getName().endsWith(".xls")) { return true; } return false; } }); for (File f : subFiles) { f.delete(); } } }
该Servlet在web.xml中配置如下:
<!-- 该serlvet不需用户访问服务启时执行init就可以了--> <servlet> <description>服务器启动时删除服务器中的垃圾文件</description> <servlet-name>DeleteExlFileServlet</servlet-name> <servlet-class> com.mengya.servlet.DeleteExlFileServlet </servlet-class> <!-- 指定服务器启动时执行的次序 --> <load-on-startup>10</load-on-startup> </servlet>
action中调用该service:
@SuppressWarnings("serial")
public class ExportUsersAction extends ActionSupport {
private UsersServiceInter userService;
public void setUserService(UsersServiceInter userService) {
this.userService = userService;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
public InputStream getDownloadFile
() {
return userService.exportUsers();
}
}
struts.xml中的配置如下:
<!-- 将用户信息用Excel导出 -->
<action name="exportUsers" class="exportUsersAction">
<result name="success" type="stream">
<!-- 指定文件下载类型 -->
<param name="contentType">application/vnd.ms-excel</param>
<!-- 对于第一个参数默认值为inline这样的话若在线打开的话会生成两个xls文件 -->
<param name="contentDisposition">attachment;filename="allUsers.xls"</param>
<param name="inputName">downloadFile
</param>
</result>
</action>
到些第一种方法就写完了,还有一种方法可以不生成Excel文件而是返回一个该xls文件的InputStream
Service中的方法如下:
import java.util.List; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.mengya.dao.UsersDaoInter; import com.mengya.entity.Users; import com.mengya.service.UsersServiceInter; public class UsersService implements UsersServiceInter { private UsersDaoInter usersdao = null; public void setUsersdao(UsersDaoInter usersdao) { this.usersdao = usersdao; } @SuppressWarnings("unchecked") public InputStream exportUsers() { // 创建一个HSSFWorkbook HSSFWorkbook wb = new HSSFWorkbook(); // 由HSSFWorkbook创建一个HSSFSheet HSSFSheet sheet = wb.createSheet(); // 由HSSFSheet创建HSSFRow HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell((short) 0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("序号"); cell = row.createCell((short) 1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("姓"); cell = row.createCell((short) 2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("名字"); cell = row.createCell((short) 3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("年龄"); List<Users> userList = this.findAll(); for (int i = 0; i < userList.size(); i++) { Users user = userList.get(i); row = sheet.createRow(i + 1); cell = row.createCell((short) 0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(i+1); cell = row.createCell((short) 1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getUfristName()); cell = row.createCell((short) 2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getUlastName()); cell = row.createCell((short) 3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(user.getUage()); } /** * 方法二:在内存中返回该InputStream,不生成文件到硬盘上 */ ByteArrayOutputStream os=new ByteArrayOutputStream(); try { wb.write(os); } catch (IOException e) { e.printStackTrace(); } byte[] bytes=os.toByteArray(); InputStream is=new ByteArrayInputStream(bytes); return is; } }
action中的调用和struts.xml中配置同上面的一样。
- poi-2.5.1.jar (681.6 KB)
- 下载次数: 242
发表评论
-
Struts2 + JasperReport应用二:jasperReport Web形式打印
2010-02-02 16:16 5279将jasperReport设计文件和编译文件放到webRoot ... -
Struts2 + JasperReport应用一:导PDF,Excel,HTML显示
2010-01-29 16:34 9889我用的是struts2.1.6,从struts2的自带的dem ... -
Struts2 标签使用简介
2009-12-23 19:33 2669web.xml配置如下: <fil ... -
Struts2 的OGNL使用简介
2009-12-22 13:25 2363<div align="center" ... -
jFreeChart与Struts2的组合,将jFreeChart作为显示视图
2009-09-25 16:26 1489jFreeChart与Struts2的组合: 一,加 ... -
Struts2与Spring2.0的组合
2009-09-09 09:46 1061Struts2与Spring的集成: 一,加入Str ... -
Struts2的异常处理
2009-09-07 13:41 1388Struts2的异常处理: 1,定义自己的异常信息类:继承Ex ... -
Struts2.0深入学习 Strust2与Servlet API,Action多方法调用,result标签的type的类型
2009-09-06 11:08 4449Struts2深入探索: 1,package中的ab ... -
Struts2.0深入学习 命名空间,模型驱动,表单重复提交
2009-09-06 11:04 1887Struts2深入探索: 1,package中的ab ... -
Struts2国际化详解
2009-09-03 15:32 2729Struts2国际化: 1,国际 ... -
Struts2文件下载
2009-09-02 20:09 10621Struts2文件下载: Struts2文件下载对应将一个In ... -
设置Struts2文件上传的类型和大小
2009-09-02 20:09 5233设置Struts2文件上传的类型和大小: 在struts. ... -
Struts2多文件上传
2009-09-02 20:08 2468Struts2多文件上传: 在Action中配置三个属性: p ... -
Struts2文件上传详解
2009-08-31 17:27 2401Struts2文件上传: 一:请选参看Struts2_9中的S ... -
Struts2.0文件上传原理
2009-08-31 13:12 3070Struts2文件上传默认采用apache的文件上传的包,新建 ... -
Struts2的监听器的使用
2009-08-25 19:02 2541Struts2的监听器: 一,建立监听器: ... -
Struts2的拦截器的使用详解
2009-08-25 18:59 2384Struts2的拦截器: 一,拦截器的使用: ... -
Struts2拦截器原理分析
2009-08-25 18:55 2387第一步:创建目标对象的接口 /** * 目标对象的接口 ... -
Struts2的检证框架详解
2009-08-25 13:00 2459Struts2的检证框架: 一,根据字段校验(为每一 ... -
Struts2的Action多个方法配置和验证
2009-08-18 20:16 4800Struts2的Action多个方法配置和验证: 1 ...
相关推荐
28.struts2-core-2.1.6.jar 29.struts2-spring-plugin-2.1.6.jar 30.woden-api-1.0M8.jar 31.wsdl4j-1.6.2.jar 32.wstx-asl-3.2.4.jar 33.xbean-spring-3.4.jar 34.XmlSchema-1.4.2.jar 35.xwork-2.1.2.jar 36....
java-3.1.12-bin.jar poi-2.5.1.jar quartz-1.5.1.jar spring.jar struts.jar toplink-api.jar velocity-1.4.jar velocity-tools-generic-1.2.jar velocity-tools-view-1.1.jar xapool.jar xerces-2.6.2.jar xml-...
Oracle10g.jar oscache-2.1.jar persistence.jar poi-2.5.1.jar portlet-api.jar proxool-0.8.3.jar spring-agent.jar spring-aop-2.0.xsd spring-aop.jar spring-beans-2.0.xsd spring-beans.jar spring-context....
spring-hibernate-dwr做的AJAX操作CRUD实例 ...1.3.jar poi-2.5.1.jar cos.jar velocity-1.5.jar velocity-tools-view-1.3.jar commons-codec.jar dwr-2.0.rc2.jar asm.jar files.lst
8. **poi-2.5.1.jar**:Apache POI是一个用于读写Microsoft Office格式文件的库,这里的版本可能较旧,但仍然用于处理Excel文件。 9. **struts2-core-2.1.6.jar**:Struts2的核心库,包含了控制器、拦截器、结果...
api.jar jxl.jar itext-1.3.jar poi-2.5.1.jar cos.jar velocity-1.5.jar velocity-tools-view-1.3.jar commons-codec.jar antlr.jar commons-beanutils.jar commons-digester.jar...
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/poi-2.5.1.jar"/> <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring.jar"/> <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/...
- `poi-2.5.1.jar`:Apache POI 是用来处理Microsoft Office格式文件的库,如Excel,Word等。 - `quartz-1.5.2.jar`:Quartz 是一个作业调度框架,用于计划和执行周期性的任务。 - `ratesapi.jar`:可能是某个汇率...
标题中的"struts2.0+hibernate3.1+spring2.0实例源码里的jar2"指的是一个基于这三个经典技术栈的Web应用程序示例。Struts2、Hibernate和Spring是Java开发中非常流行的开源框架,它们分别用于MVC(模型-视图-控制器)...
8. `poi-2.5.1.jar`:Apache POI是用于处理Microsoft Office格式(如Excel)的Java库。 9. `mysql-connector-java-5.1.7-bin.jar`:MySQL的Java连接器,用于连接Java应用和MySQL数据库。 10. `commons-collections...
6. **struts.jar** - 这可能是Struts1的库文件,是一个早期的MVC框架,尽管已被Struts2取代,但在一些遗留系统中仍可能被使用。 7. **javassist.jar** - Javaassist是一个用于操作字节码的库,常用于动态代理和AOP...
4. **Struts2**: `struts2-core-2.0.11.1.jar`是Apache Struts2框架的一部分,这是一个用于构建MVC(模型-视图-控制器)架构的Java Web应用程序的框架。它简化了开发流程,并提供了丰富的插件和扩展来增强功能。 5....
2. **poi-2.5.1.jar**:Apache POI 是一个用于读写Microsoft Office格式文件的Java库,如Word(DOC)、Excel(XLS)和PowerPoint(PPT)。在Java程序中,可以使用POI来生成、读取和修改这些文件,尤其在数据导入导出...
7. **poi-2.5.1.jar**:Apache POI是用于处理Microsoft Office格式文件(如Excel)的Java库。在SSH项目中,如果需要读写Excel数据,例如报表导出,那么POI是不可或缺的。 8. **spring-orm-3.2.4.RELEASE-javadoc....
8. **POI**: poi-2.5.1.jar是Apache POI项目的一部分,用于读写Microsoft Office格式的文件,如Word、Excel等。在Java应用中,POI可以帮助处理Excel数据。 这些依赖包的组合,为开发者提供了一个功能完备的SSH框架...
【标题】"人力资源管理(基于ssh的j2ee项目)附带lib包2"所涉及的知识点主要集中在Java企业级开发领域,特别是Spring、Struts和Hibernate(SSH)框架的集成应用,以及与之相关的技术和工具。这个项目是用于实现全面...
8. **jxl.jar**:与POI类似,jxl库也是处理Excel文件的,但版本较旧,可能已不再维护,建议使用POI。 9. **c3p0-0.9.1.2.jar**:C3P0是一个数据库连接池,它提高了数据库连接的效率,通过复用已打开的数据库连接,...
在给定的文件列表中,我们看到`poi-2.5.1.jar`,这是Apache POI的一个早期版本。现代项目通常会使用更新的版本,如4.x系列,因为它们包含更多的功能和修复了已知问题。你可以通过Maven或Gradle将其添加为依赖项,...