尝试写入已存在的* .xlsx文件,导致NullPointerException

时间:2017-10-10 10:23:16

标签: java xlsx

以下是我的功能

 public static void writeOutputExtraInfo(
        HueIfxModuleMasterStruct<OutputEngineIfxJobMasterStruct> 
    ifxModuleMasterStruct, String filePath)
        throws InvalidFormatException, IOException {
    File file = new File(filePath);
    //XSSFWorkbook workbook = (XSSFWorkbook)WorkbookFactory.create(file);
    XSSFWorkbook workbook = new XSSFWorkbook(file);
    writeOutputExtraBasicInfo(ifxModuleMasterStruct, workbook);
    FileOutputStream fileOutputStream = new FileOutputStream(new File(filePath));
    workbook.write(fileOutputStream);
    fileOutputStream.close();
    workbook.close();

}

我收到以下错误

org.apache.poi.POIXMLException: java.lang.NullPointerException
at org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:159) ~[poi-ooxml-3.13.jar:3.13]
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:210) ~[poi-ooxml-3.13.jar:3.13]

有人能说出代码有什么问题。

2 个答案:

答案 0 :(得分:0)

你能这样试试吗?

Workbook workbook = WorkbookFactory.create(new FileInputStream(filePath));

因此,从FileInputStream获取Workbook实例。

答案 1 :(得分:0)

在xavFWorkbook的构造函数的javadoc中有一条注释:

  

完成工作簿的使用后,您应该关闭   通过调用POIXMLDocument.close()打包,以避免遗留文件   处理打开。

所以我的猜测是异常是由于文件是打开的,而不是因为它存在。