直接上代码
// 1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
Map<String, Object> map = new HashMap<String, Object>();
// 解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
InputStream in = null;
if (!ServletFileUpload.isMultipartContent(request))
{
// 按照传统方式获取数据
/* return ""; */
}
// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
// 如果fileitem中封装的是普通输入项的数据
if (item.isFormField()) {
String name = item.getFieldName();
// 解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
map.put(name, value);
} else {// 如果fileitem中封装的是上传文件
// 得到上传的文件名称,
String filename = item.getName();
String filedsname = item.getFieldName();
if (filename == null || filename.trim().equals("")) {
continue;
}
// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
// c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\") + 1);
// 获取item中的上传文件的输入流
in = item.getInputStream();
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileUploadException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
// 读取Excel文件并存入数据库
Workbook wb = new XSSFWorkbook(in);
// 获取Excel文档中的sheet
for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++)
{
//这里是第一个sheet 有跟多的话就判断更多就行了
if(sheetIndex==0) {
Sheet sht = wb.getSheetAt(sheetIndex);
for (int i = 2;i<= sht.getLastRowNum(); i++)
{
Row r = sht.getRow(i);
//取出这一行这一列的值
String stringCellValue = r.getCell(1).getStringCellValue();
String stringCellValue2 = r.getCell(2).getStringCellValue();
。。。。。。。
}
}
}
注意解决碰到的某些问题
1.空指针问题:
Cell cell = r.getCell(j);
if (cell == null) {
r.createCell(j);
}
2数据类型问题(j为第几列)
r.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
over:希望对你有帮助!!有问题可以随时与我沟通我们一起学习。加油骚年!
原文:https://www.cnblogs.com/liglacier/p/13609150.html