SSM上传EXCLE到数据库 和 从数据库导出为EXCLE
package com.ABC.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import java.util.List; import javax.imageio.stream.FileImageInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; 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.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; import com.ABC.pojo.NewStudent; import com.ABC.service.NewStudentInfoService; @Controller public class FileUploadController { @Autowired private NewStudentInfoService newStudentInfoService; @RequestMapping("/importexcel") public String upLoadExcle(MultipartFile file, HttpServletRequest request, Model model) throws Exception { System.out.println("你来上传了啊!===>"); // 获取服务器端路径 String path = request.getServletContext().getRealPath("upload"); System.out.println("获取服务器端路径path==>" + path); // 获取到上传文件名称 String fileName = file.getOriginalFilename(); System.out.println("获取到上传文件名称fileName==>" + fileName); // 创建目标File File targetFile = new File(path + "\\" + fileName); System.out.println("创建目标targetFile==>" + targetFile); // 创建存储目录 File targePath = new File(path); System.out.println("创建存储目录targePath==>" + targePath); // 判断服务器端目录是否存在,如果不存在创建 if (!targePath.exists()) { targePath.mkdir(); } // 把上传的文件存储到服务器端 file.transferTo(targetFile); // 读取上传到服务器端的文件,遍历excle Workbook workbook = WorkbookFactory.create(targetFile); Sheet sheet = workbook.getSheet("Sheet1"); // 判断行数 int rownum = sheet.getPhysicalNumberOfRows(); for (int i = 0; i < rownum; i++) { Row row = sheet.getRow(i); // 判断单元格数量 int cellnum = row.getPhysicalNumberOfCells(); StringBuffer buf = new StringBuffer(); for (int j = 0; j < cellnum; j++) { Cell cell = row.getCell(j); if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { buf.append(cell.getStringCellValue() + "~"); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // 创建数字格式化工具类 DecimalFormat df = new DecimalFormat("####"); // 把从cell单元格读取到的数字,进行格式化防止科学计数法形式显示 buf.append(df.format(cell.getNumericCellValue()) + "~"); } } // 单元格循环完成后读取到的是一行内容 String hang = buf.toString(); String[] rows = hang.split("~"); NewStudent stu = new NewStudent(); stu.setName(rows[1]); stu.setScore(Integer.valueOf(rows[2])); stu.setPhone(rows[3]); // System.out.println("上传学生信息:"+stu); newStudentInfoService.saveStudent(stu); } return "success"; } @RequestMapping(value = "downloadexcel") public void downLoadExcel(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception, IOException { // 查出所有的学生 List<NewStudent> stuList = newStudentInfoService.getAll(); // 获取服务端路径 String path = request.getServletContext().getRealPath("down"); String fileName = "testexcel.xlsx"; // 创建存储File File targetFile = new File(path + "\\" + fileName); // 创建存储目录 File targetPath = new File(path); // 判断服务器端目录是否存在,如果不存在创建目录 if (!targetPath.exists()) { targetPath.mkdir(); } // 生成excle XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("学生成绩表"); int rowNum = 0; for (NewStudent stu : stuList) { XSSFRow row = sheet.createRow(rowNum); row.createCell(0).setCellValue(stu.getId()); row.createCell(1).setCellValue(stu.getName()); row.createCell(2).setCellValue(stu.getScore()); row.createCell(3).setCellValue(stu.getPhone()); rowNum++; } // 把工作薄对象写入服务器磁盘 System.out.println("创建文件:" + targetFile); workbook.write(new FileOutputStream(targetFile)); // 设置响应头 response.setContentType("application/x-xls;charset=GBK"); // 设定浏览器下载提示 response.setHeader("Content-Disposition", "attachment;filename=\"" + new String(fileName.getBytes(), "ISO8859-1") + "\""); //设置响应的文件的长度 response.setContentLength((int) targetFile.length()); //向响应文件流缓冲区写入文件 byte[] buff =new byte[4096]; BufferedOutputStream output = null; BufferedInputStream input = null; output = new BufferedOutputStream(response.getOutputStream()); input = new BufferedInputStream(new FileInputStream(targetFile)); //遍历文件 int len = 0; while((len = input.read(buff))!=-1){ output.write(buff, 0, len); }output.flush(); response.flushBuffer(); if(input!=null){ input.close(); }if(output!=null){ output.close(); } } }