为什么不从excel(* .xlsx)加载信息(使用Apache POI)?

时间:2016-09-26 12:24:42

标签: java excel jsp apache-poi

尝试使用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响应“文件正忙”。 可能是什么问题以及如何解决它?

3 个答案:

答案 0 :(得分:2)

当您打开FileInputStreamFileOutputStream时,您需要将其关闭,否则您的文件可能会被该进程根据特别是在Windows操作系统上使用的操作系统锁定。更一般地说,您需要使用close所有Closeable个对象来防止任何泄漏或此类问题。

因此,您应该将代码重写为下一个使用try-with-resources语句,该语句将自动为您关闭资源。

try (InputStream ExcelFileToRead = new FileInputStream("C:\\server\\to_db.xlsx");
     XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead)) {
   ...

确实,在您的代码中,您有2个CloseableExcelFileToReadwb个对象。

答案 1 :(得分:0)

我认为你必须使用“.close()”关闭文件。 This可能会对您有所帮助。

答案 2 :(得分:0)

在lib目录中没有一些公共库

commons-collections4-4.1.jar,commons-codec-1.10.jar,commons-fileupload-1.3.jar

他们的存在解决了问题。