直接上代碼
// 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:希望對你有幫助!!有問題可以隨時與我溝通我們一起學習。加油騷年!