使用到的jar包

JSP: client.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
String importMsg = "";
if (request.getSession().getAttribute("msg") != null) {
importMsg = request.getSession().getAttribute("msg").toString();
}
request.getSession().setAttribute("msg", "");
%>
<head>
<title>批量导入客户</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="${pageContext.request.contextPath}/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
function check() {
var excel_file = $("#excel_file").val();
if (excel_file == "" || excel_file.length == 0) {
alert("请选择文件路径!");
return false;
} else {
return true;
}
} $(document).ready(function() {
var msg = "";
if ($("#importMsg").text() != null) {
msg = $("#importMsg").text();
}
if (msg != "") {
alert(msg);
}
});
</script>
<body>
<a href="download.htm?fileName=muban.xls">下载Exel模板</a> <div>
<font color="bule">批量导入客户</font>
</div> <form action="batchimport.htm" method="post" enctype="multipart/form-data" onsubmit="return check();">
<div style="margin: 30px;">
<input id="excel_file" type="file" name="filename" accept="xlsx" size="80" />
<input id="excel_button" type="submit" value="导入Excel" />
</div>
<font id="importMsg" color="red"><%=importMsg%></font><input type="hidden" />
</form>
</body>
</html>

controller: ClientController.java

package com.shiliu.game.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import com.shiliu.game.domain.bean.Customer;
import com.shiliu.game.utils.ReadExcel;
import com.shiliu.game.utils.WDWUtil; /**
* @author wkr
* @Date 2016-11-18
*/
@Controller
@RequestMapping("/client")
public class ClientController { private static Log log = LogFactory.getLog(ClientController.class);
/**
* 访问controller进入操作页面
* @return
*/
@RequestMapping(value="/init")
public String init(){
System.out.println("控制台输出:初始化页面信息");
return "client/client";
}
/**
* 上传Excel,读取Excel中内容
* @param file
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value = "/batchimport",method = RequestMethod.POST)
public String batchimport(@RequestParam(value="filename") MultipartFile file,
HttpServletRequest request,HttpServletResponse response) throws IOException{
log.info("ClientController ..batchimport() start");
String Msg =null;
boolean b = false; //判断文件是否为空
if(file==null){
Msg ="文件是为空!";
request.getSession().setAttribute("msg",Msg);
return "client/client";
} //获取文件名
String name=file.getOriginalFilename(); //进一步判断文件是否为空(即判断其大小是否为0或其名称是否为null)验证文件名是否合格
long size=file.getSize();
if(name==null || ("").equals(name) && size==0 && !WDWUtil.validateExcel(name)){
Msg ="文件格式不正确!请使用.xls或.xlsx后缀文档。";
request.getSession().setAttribute("msg",Msg);
return "client/client";
} //创建处理EXCEL
ReadExcel readExcel=new ReadExcel();
//解析excel,获取客户信息集合。
List<Customer> customerList = readExcel.getExcelInfo(file);
if(customerList != null && !customerList.toString().equals("[]") && customerList.size()>=1){
b = true;
} if(b){
//迭代添加客户信息(注:实际上这里也可以直接将customerList集合作为参数,在Mybatis的相应映射文件中使用foreach标签进行批量添加。)
for(Customer customer:customerList){
//这里可以做添加数据库的功能
System.out.println("第一个值:"+customer.getCustomer1()+"\t第二个值:"+customer.getCustomer2()+"\t第三个值:"+customer.getCustomer3());
}
Msg ="批量导入EXCEL成功!";
request.getSession().setAttribute("msg",Msg);
}else{
Msg ="批量导入EXCEL失败!";
request.getSession().setAttribute("msg",Msg);
}
return "client/client";
}
/**
* 下载Excel模板
* @param fileName
* @param request
* @param response
* @return
*/
@RequestMapping("/download")
public String download(String fileName, HttpServletRequest request,
HttpServletResponse response) {
System.out.println("控制台输出:走入下载");
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName="+ fileName);
try {
/*String path = Thread.currentThread().getContextClassLoader()
.getResource("").getPath()
+ "download";//这个download目录为啥建立在classes下的
*/
String path="D:\\upload";
InputStream inputStream = new FileInputStream(new File(path+ File.separator + fileName)); OutputStream os = response.getOutputStream();
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
} // 这里主要关闭。
os.close(); inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 返回值要注意,要不然就出现下面这句错误!
//java+getOutputStream() has already been called for this response
return null;
} }

utils: WDWUtil.java

package com.shiliu.game.utils;
/**
* @author wkr
* @Date 2016-11-18
* 工具类验证Excel文档
*/
public class WDWUtil {
/**
* @描述:是否是2003的excel,返回true是2003
* @param filePath
* @return
*/
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
} /**
* @描述:是否是2007的excel,返回true是2007
* @param filePath
* @return
*/
public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
} /**
* 验证是否是EXCEL文件
* @param filePath
* @return
*/
public static boolean validateExcel(String filePath){
if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))){
return false;
}
return true;
}
}

utils: ReadExcel.java

package com.shiliu.game.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile; import com.shiliu.game.domain.bean.Customer;
/**
* @author wkr
* @Date 2016-11-18
* 工具类读取Excel类中内容
*/
public class ReadExcel {
//总行数
private int totalRows = 0;
//总条数
private int totalCells = 0;
//错误信息接收器
private String errorMsg;
//构造方法
public ReadExcel(){}
//获取总行数
public int getTotalRows() { return totalRows;}
//获取总列数
public int getTotalCells() { return totalCells;}
//获取错误信息-暂时未用到暂时留着
public String getErrorInfo() { return errorMsg; } /**
* 读EXCEL文件,获取客户信息集合
* @param fielName
* @return
*/
public List<Customer> getExcelInfo(MultipartFile Mfile){ //把spring文件上传的MultipartFile转换成CommonsMultipartFile类型
CommonsMultipartFile cf= (CommonsMultipartFile)Mfile; //获取本地存储路径
File file = new File("D:\\fileupload");
//创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
if (!file.exists()) file.mkdirs();
//新建一个文件
File file1 = new File("D:\\fileupload\\" + new Date().getTime() + ".xls");
//将上传的文件写入新建的文件中
try {
cf.getFileItem().write(file1);
} catch (Exception e) {
e.printStackTrace();
} //初始化客户信息的集合
List<Customer> customerList=new ArrayList<Customer>();
//初始化输入流
FileInputStream is = null;
Workbook wb = null;
try{
//根据新建的文件实例化输入流
is = new FileInputStream(file1);
//根据excel里面的内容读取客户信息 //当excel是2003时
wb = new HSSFWorkbook(is);
//当excel是2007时
//wb = new XSSFWorkbook(is); //读取Excel里面客户的信息
customerList=readExcelValue(wb);
is.close();
}catch(Exception e){
e.printStackTrace();
} finally{
if(is !=null)
{
try{
is.close();
}catch(IOException e){
is = null;
e.printStackTrace();
}
}
}
return customerList;
} /**
* 读取Excel里面客户的信息
* @param wb
* @return
*/
private List<Customer> readExcelValue(Workbook wb){
//得到第一个shell
Sheet sheet=wb.getSheetAt(0); //得到Excel的行数
this.totalRows=sheet.getPhysicalNumberOfRows(); //得到Excel的列数(前提是有行数)
if(totalRows>=1 && sheet.getRow(0) != null){//判断行数大于一,并且第一行必须有标题(这里有bug若文件第一行没值就完了)
this.totalCells=sheet.getRow(0).getPhysicalNumberOfCells();
}else{
return null;
} List<Customer> customerList=new ArrayList<Customer>();//声明一个对象集合
Customer customer;//声明一个对象 //循环Excel行数,从第二行开始。标题不入库
for(int r=1;r<totalRows;r++){
Row row = sheet.getRow(r);
if (row == null) continue;
customer = new Customer(); //循环Excel的列
for(int c = 0; c <this.totalCells; c++){
Cell cell = row.getCell(c);
if (null != cell){
if(c==0){
customer.setCustomer1(getValue(cell));//得到行中第一个值
}else if(c==1){
customer.setCustomer2(getValue(cell));//得到行中第二个值
}else if(c==2){
customer.setCustomer3(getValue(cell));//得到行中第三个值
}
}
}
//添加对象到集合中
customerList.add(customer);
}
return customerList;
} /**
* 得到Excel表中的值
*
* @param cell
* Excel中的每一个格子
* @return Excel中每一个格子中的值
*/
@SuppressWarnings({ "static-access", "unused" })
private String getValue(Cell cell) {
if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {
// 返回布尔类型的值
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
// 返回数值类型的值
return String.valueOf(cell.getNumericCellValue());
} else {
// 返回字符串类型的值
return String.valueOf(cell.getStringCellValue());
}
} }

entity: Customer.java

package com.shiliu.game.domain.bean;
/**
* @author wkr
* @Date 2016-11-18
* 实体类
*/
public class Customer { private Integer id; private String Customer1; private String Customer2; private String Customer3; public Customer() {
super();
} public Customer(Integer id, String customer1, String customer2,
String customer3) {
super();
this.id = id;
Customer1 = customer1;
Customer2 = customer2;
Customer3 = customer3;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getCustomer1() {
return Customer1;
} public void setCustomer1(String customer1) {
Customer1 = customer1;
} public String getCustomer2() {
return Customer2;
} public void setCustomer2(String customer2) {
Customer2 = customer2;
} public String getCustomer3() {
return Customer3;
} public void setCustomer3(String customer3) {
Customer3 = customer3;
}
}

Customer

效果页面:

java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)的更多相关文章

  1. java的poi技术读,写Excel[2003-2007,2010]

    在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作 读取excel和MySQL相关: java的poi技术 ...

  2. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

  3. java的poi技术写Excel的Sheet

    在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-20 ...

  4. java的poi技术读取Excel[2003-2007,2010]

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  5. java的poi技术读取和导入Excel实例

    本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下. 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用 ...

  6. java的poi技术读取Excel数据

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  7. java的poi技术读取Excel[2003-2007,2010]

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  8. [SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. Java Web 项目的文件/文件夹上传下载

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

随机推荐

  1. Swift中的Void类型与空元祖表达式

    可能有不少Swift开发者会忽略这么一个细节:在Swift中,Void类型其实是一个别名类型,而其真正的类型为(),即一个空元祖(empty tuple)! 这种语言特性给Swift带来了一些比较方便 ...

  2. XML 文档和数据

    .NET Framework 4.5 其他版本 .NET Framework 提供了一组全面而集成的类,可用来方便地生成可以识别 XML 的应用程序. 通过以下命名空间中的类,可以分析和编写 XML, ...

  3. brew 出现 git 错误的问题分析

    现象 brew update的时候出现 gitcrash   分析 在brew update 的时候看见有 git gc 的字样,提示有在gc 的动作.到/usr/local/ 目录,直接运行 git ...

  4. Selenium实战脚本集(4)--简单的开发者头条客户端

    描述 去开发者头条抓取本日的top 10内容,也就是排在前面的10个,需要抓取标题和url 将这些内容保存在数据库,推荐使用sqlite 写个简单的客户端,要求可以展示每日的内容,点击标题后可以打开浏 ...

  5. ATT 解锁手机

    最近豪们都在忙着买买买950 本土鳖左瞅瞅右看看实在钱包不够豪 正好看到美帝640打折39刀 (http://www.microsoftstore.com/store/msusa/en_US/pdp/ ...

  6. ASP.NET MVC 分部视图

    @model PartViewDemo.Models.HomeInfo@using PartViewDemo.Models;@{ ViewBag.Title = "Index";} ...

  7. 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

    消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...

  8. jQuery 焦点图 旋转木马

    jQuery BxSlider 滑动滚动效果 jQuery Easing 动画效果扩展

  9. 推荐几个学习Node的网址:

    推荐几个学习Node的网址: Nodejs 安装教程 http://jingyan.baidu.com/article/a948d6515d4c850a2dcd2e18.html http://nod ...

  10. Sql Server:不允许 ASSIGNMENT 语句中包含 FOR XML 子句

    编写函数的时候遇到“不允许 ASSIGNMENT 语句中包含 FOR XML 子句”错误,开始以为数据库函数里不可以写 FOR XML 子句,仔细看了看总觉得这么写别扭索性改了一种写法就通过了. BE ...