java excel 上传到服务器_POI上传,导入excel文件到服务器1

首先说一下所使用的POI版本3.8,需要用的的Jar包:

dom4j-1.6.1.jar

poi-3.8-20120326.jar

poi-ooxml-3.8-20120326.jar

poi-ooxml-schemas-3.8-20120326.jar

poi-scratchpad-3.8-20120326.jar

xmlbeans-2.3.0.jar

web前端页面:

action:填写请求地址;

enctype="multipart/form-data":一定要带上,要不然后台获取不到文件的字节流;

struts2的请求配置:

java处理struts2请求:

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import org.apache.commons.io.FileUtils;

import org.apache.commons.io.FilenameUtils;

import org.apache.struts2.ServletActionContext;

import org.apache.struts2.ServletActionContext;

public class DrugsAction extends ActionSupport{

private File excelFile;

private String excelFileFileName;

public File getExcelFile() {

return excelFile;

}

public void setExcelFile(File excelFile) {

this.excelFile = excelFile;

}

public String getExcelFileFileName() {

return excelFileFileName;

}

public void setExcelFileFileName(String excelFileFileName) {

this.excelFileFileName = excelFileFileName;

}

public String fileInfo(){

try {

//创建新文件名

String excelName = "xinwenjian";

//获取文件上传路径

String filePath = getFilePath(excelFileName1);

//文件复制后保存路径

String path="WEB-INF/upload/";

//根据相对部署路径计算完整路径

path=ServletActionContext.getServletContext().getRealPath(path);

System.out.println(path);

String sufix = FileUtil.getFileSufix(excelFileFileName).toLowerCase();

excelFileName1 = excelFileName1 + "." + sufix;

//判断上传文件的保存目录是否存在

if (!file.exists() && !file.isDirectory()) {

//创建目录

file.mkdir();

}

//复制文件到服务器

FileUtils.copyFile(excelFile,new File(path,excelFileName1));

//解析excel文件

allInfo(path,excelFileName1);

} catch (IOException e) {

System.out.println("error");

e.printStackTrace();

}

//this.outJsonString("success");

return getResult();

}

/**

* 获取文件上传路径

* @param dirpath

* @return

*/

public static String getFilePath(String fileName) {

System.out.print(fileName);

String filePath = fileName.substring(0, 2)+File.separator+fileName.substring(2, 4)+File.separator

+fileName.substring(4, 6)+File.separator;

return filePath;

}

}

解析Excel类

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.io.InputStream;

import java.io.PushbackInputStream;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.poi.POIXMLDocument;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

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;

public class UserInfo {

public static void main(String[] args){

String path2003 = "D:\\Users\\star\\Workspaces\\MyEclipse 10\\.metadata\\.me_tcat\\webapps\\dms\\WEB-INF";

String FileName="xinwenjian.xls";

//解析文件

excelInfo(path2003,FileName);

//删除文件

deleteFile(path2003,FileName);

}

public static List excelInfo(String path,String FileName){

long start2003 = System.currentTimeMillis();

List excellist=new ArrayList();

String path2003 = "";//Excel2003文件路径

//解析Excel

excellist = parseExcel(path+File.separator+FileName);

System.out.println(excellist.size());

System.out.println("excellist"+excellist.toString());

System.out.println("size:"+excellist.size());

long end2003 = System.currentTimeMillis();

System.out.println("解析Excel2003完毕!共用时"+(end2003-start2003)+"毫秒!");

deleteFile(path,FileName);

return excellist;

}

/**

* 根据路径加载解析Excel

* @param path

* @return

*/

public static List parseExcel(String path){

List excellist=new ArrayList();

System.out.println(path);

Map map = new HashMap();

File file = null;

InputStream input = null;

Workbook workBook = null;

Sheet sheet = null;

if(path!=null&&path.length()>7){

//判断文件是否是Excel(2003、2007)

String suffix = path.substring(path.lastIndexOf("."),path.length());

if (".xls".equals(suffix) || ".xlsx".equals(suffix)) {// 2003后缀或2007后缀

file = new File(path);

try {

input = new FileInputStream(file);

} catch (FileNotFoundException e) {

System.out.println("未找到指定的文件!");

e.printStackTrace();

} catch (Exception e) {

System.out.println("读取Excel文件发生异常!");

e.printStackTrace();

}

if(!input.markSupported()){

input = new PushbackInputStream(input,8);

}

try{

if(POIFSFileSystem.hasPOIFSHeader(input) || POIXMLDocument.hasOOXMLHeader(input)){

workBook = WorkbookFactory.create(input);

}else{

System.out.println("非法的输入流:当前输入流非OLE2流或OOXML流!");

}

} catch(IOException e){

System.out.println("创建表格工作簿对象发生IO异常!原因:"+e.getMessage());

e.printStackTrace();

} catch(InvalidFormatException e){

//Your InputStream was neither an OLE2 stream, nor an OOXML stream.

System.out.println("非法的输入流:当前输入流非OLE2流或OOXML流!");

e.printStackTrace();

}

try{

if(workBook!=null){

int numberSheet = workBook.getNumberOfSheets();

if(numberSheet>0){

sheet = workBook.getSheetAt(0);//获取第一个工作簿(Sheet)的内容【注意根据实际需要进行修改】

excellist = getExcelContent(sheet);

}else{

System.out.println("目标表格工作簿(Sheet)数目为0!");

}

}

input.close();

}catch(IOException e){

System.out.println("关闭输入流异常!"+e.getMessage());

e.printStackTrace();

}

}else{

System.out.println("非法的Excel文件后缀!");

}

}else{

System.out.println("非法的文件路径!");

}

return excellist;

}

/**

* 解析(读取)Excel内容

* @param sheet

* @return

*/

@SuppressWarnings("static-access")

public static List getExcelContent(Sheet sheet){

List excellist=new ArrayList();

Date data=new Date();

int rowCount = sheet.getPhysicalNumberOfRows();//总行数

if(rowCount>1){

Row titleRow = sheet.getRow(2);//标题行

int columnNum=titleRow.getPhysicalNumberOfCells();//总列数

for(int i=3;i

Row row = sheet.getRow(i);//第i行

Map map=new HashMap();

for(int j=1;j

Cell cell = row.getCell(j);//列

String title=titleRow.getCell(j).getStringCellValue();//标题

Object conten=isNUMERICAndSTRING(cell);

//当读取到null时不会报错,继续执行

if("NaN".equals(conten)){

conten=" ";

}

//string类型

if(title.indexOf("架位号")>=0){

map.put("shelfNum",conten);

}

//数字类型

else if(title.indexOf("商品类型")>=0){

map.put("drugType", (int)cell.getNumericCellValue());

}

//判断日期类型

else if(titleRow.getCell(j).getStringCellValue().indexOf("入库日期")>=0){

if(HSSFDateUtil.isCellDateFormatted(cell)){

data=cell.getDateCellValue();

map.put("storageDate", data);

}

}

}

excellist.add(map);

System.out.println("第"+i+"行"+excellist.toString());

}

}

return excellist;

}

//判断行内值的类型

public static Object isNUMERICAndSTRING(Cell cell){

if(cell==null ){

return "NaN";

}else if(cell.getCellType()==cell.CELL_TYPE_STRING){

return cell.getStringCellValue().trim();

}else if(cell.getCellType()==cell.CELL_TYPE_NUMERIC){

return cell.getNumericCellValue();

}

return "error";

}

//删除文件

private static void deleteFile(String path,String FileName) {

File file = new File(path);

File Array[] = file.listFiles();

for (File f : Array) {

if (f.isFile()) {// 如果是文件

if (f.getName().equals(FileName)) {

f.delete();

return;

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值