尝试使用Apache POI 3.15从Excel文件(* .xlsx)加载JSP信息。
在Excel中查看信息
num解决方案
1首先
2秒
3第三
尝试使用代码
try {
InputStream ExcelFileToRead = new FileInputStream("C:\\server\\to_db.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead);
XSSFWorkbook test = new XSSFWorkbook();
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
row = (XSSFRow) rows.next();
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
cell = (XSSFCell) cells.next();
if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
out.print(cell.getStringCellValue() + " ");
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
out.print(cell.getNumericCellValue() + " ");
} else {
//U Can Handel Boolean, Formula, Errors
}
}
out.println("Succefully!!!");
}
}
catch (Exception e) {
out.println( "exception: "+e);
}
得到一个奇怪的结果:
没有关于JSP的错误和缺席信息......
所有浏览器都会重现问题。 如果我尝试打开C:\ server \ to_db.xlsx操作系统Windows响应“文件正忙”。 可能是什么问题以及如何解决它?
答案 0 :(得分:2)
当您打开FileInputStream
或FileOutputStream
时,您需要将其关闭,否则您的文件可能会被该进程根据特别是在Windows操作系统上使用的操作系统锁定。更一般地说,您需要使用close
所有Closeable
个对象来防止任何泄漏或此类问题。
因此,您应该将代码重写为下一个使用try-with-resources
语句,该语句将自动为您关闭资源。
try (InputStream ExcelFileToRead = new FileInputStream("C:\\server\\to_db.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead)) {
...
确实,在您的代码中,您有2个Closeable
个ExcelFileToRead
和wb
个对象。
答案 1 :(得分:0)
我认为你必须使用“.close()”关闭文件。 This可能会对您有所帮助。
答案 2 :(得分:0)
在lib目录中没有一些公共库
commons-collections4-4.1.jar,commons-codec-1.10.jar,commons-fileupload-1.3.jar
他们的存在解决了问题。