代码如下:@RequestMapping(value = "/uploadExcel",method = RequestMethod.POST)
publicvoidinputExcel(Model model,HttpServletResponse response,HttpServletRequest request/*,
@RequestParam String myfile*/) throwsIOException {
MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
MultipartFile mf = mr.getFile("myfile");
String OriginalName = mf.getOriginalFilename();//原始文件名
//得到上传文件格式
String fileext = OriginalName.substring(OriginalName.lastIndexOf(".")+1);
System.out.println(fileext);
String format2007 = "xlsx";//excel格式 2007为xlsx格式
String format2003 = "xls";//excel格式 2003为xlsx格式
//注:if 先不看
if(OriginalName == null/*|| !fileext.equals(format2007) || !fileext.equals(format2003)*/){//判断文件是否存在或者文件格式是否正确
ResponseUtils.writeText(response,String.valueOf(0));//文件不存在或者文件格式不对
} else{
String src = "/upload";
String folderPath = request.getSession().getServletContext().getRealPath(src)+"\\"+OriginalName;
System.out.println(folderPath);
InputStream is = mf.getInputStream();
OutputStream os = new
FileOutputStream(folderPath);
intlen=0; byte[] b = newbyte[1024];
while((len=is.read(b))>0){
os.write(b, 0, len);
}
is.close();
os.close();
readExcel(folderPath);
System.out.println(folderPath+"============");
}
}
privatevoidreadExcel(String filePath){
try{
InputStream IS = newFileInputStream(newFile(filePath));
Workbook book = null;
try{
//2003版本Excel .xls格式
book = newHSSFWorkbook(IS);
} catch(Exception ex) {
//2007版本Excel .xlsx格式
book = newXSSFWorkbook(newFileInputStream(String.valueOf(IS)));
}
//得到第一个工作簿
Sheet sheet = book.getSheetAt(0);//参数 int
if(sheet == null){
return;
}
//遍历行
for(inti = 0;i <= sheet.getLastRowNum();i++){
HSSFRow row = (HSSFRow) sheet.getRow(i);
if(row == null){
continue;
}
//遍历cell
for(intk = 0;k <= row.getLastCellNum();k++){
HSSFCell cell = row.getCell(k);//参数 int
if(cell == null){
continue;
}
//调用getValue方法
System.out.println("----------"+getValue(cell));
}
}
//写入数据并关闭文件
} catch(Exception e){
e.printStackTrace();
}
}
privatestaticString getValue(HSSFCell cell){
if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){
returnString.valueOf(cell.getBooleanCellValue());
} elseif(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
returnString.valueOf(cell.getNumericCellValue());
} else{
returnString.valueOf(cell.getStringCellValue());
}
}
文件已上传成功
错误:E:\Idea\workspace\gisdispatch-aggregator\gd-web\target\gd-web\upload\11111.xlsx
java.io.FileNotFoundException: java.io.FileInputStream@266964d7 (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
求解决
虽然完全看不懂你想要说什么,但是一听到excel解析异常,我就想到,应该注意excel单元格的格式你解析的对不对,对于HSSFCell.CELL_TYPE_NUMERIC,它可能有很多不同的cellStyle,你直接String.valueOf(cell.getNumericCellValue()),这样处理,有一定的风险,具体要看你excel的内容了,建议:自己打断点跑一下。
我debug跑过了 就是上传执行完以后调用readExcel(folderPath);这个方法就直接报该错误
@骚年,你渴望力量吗?: 你往readExcel()方法里跟,跟进去就能知道哪儿出问题了
@让我发会呆: debug到这个方法时在下一步就报错
@骚年,你渴望力量吗?: 你debug到readExcel()方法时,看看path对不对,然后按f8往这个方法的断点里去,而不是按f6下一步。
@让我发会呆: 我的工具是Idea 不是myeclipse
@骚年,你渴望力量吗?: 好吧,没用过。不过readExcel()方法才是解析excel每个cell的,你断点至少要打到getValue()里才行。