程序暂停尝试读取Excel工作簿(Apache POI)

我正在尝试读取Excel工作簿( .xlsx ),但程序刚刚在初始化Workbook时暂停。 我不确定发生了什么,因为它不会给出任何错误。

当我说停止时,我的意思是程序只是暂停。 它仍在运行,但我觉得它卡住了,不知道。

 import java.io.File; import java.io.FileInputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelReader { private String excelFilePath; private FileInputStream inputStream; private Workbook workbook; private Sheet sheet; // Constructors public ExcelReader() { try { // Get path to excel workbook and put in stream excelFilePath = "/home/flow/project/mydata.xlsx"; inputStream = new FileInputStream(new File(excelFilePath)); // Get type of workbook (Excel 2003 or Excel 2007+) workbook = getWorkbook(); } catch (Exception e) { e.printStackTrace(); } } // Get type of workbook (Excel 2003 or Excel 2007+) private Workbook getWorkbook() { Workbook work = null; try { if(excelFilePath.endsWith("xlsx")) { System.out.println("In firstIf"); // Prints this work = new XSSFWorkbook(inputStream); // Gets stuck here System.out.println("After XSSF"); // Never prints this } else if(excelFilePath.endsWith("xls")) { work = new HSSFWorkbook(inputStream); } else throw new IllegalArgumentException("The specified file is not an Excel file"); } catch (Exception e) { e.printStackTrace(); } return work; } } 

我究竟做错了什么? 为什么程序不能移动到下一行?

我也注意到暂停,我的意思是程序只是暂停在XSSFWorkbook正在初始化的行。 我发现在类path中缺less一些jar文件。 在我的情况下,下面的jar不在类path中:curvesapi-1.03.jar xmlbeans-2.6.0.jar

Java运行时并没有抛出类未发现exception。 相反,Java运行时挂在XSSFWorkbook构造函数上。

POI分配中的所有jar子都应该添加到class级pathpoi-3.14-20160307.jar poi-excelant-3.14-20160307.jar poi-ooxml-3.14-20160307.jar poi-ooxml-schemas-3.14-20160307.jar poi- scratchpad-3.14-20160307.jar commons-codec-1.10.jar commons-logging-1.2.jar junit-4.12.jar log4j-1.2.17.jar curvesapi-1.03.jar xmlbeans-2.6.0.jar

我无法弄清楚为什么程序一直停止,所以我降级到3.9版本,并得到了代码工作。 感谢Gagravarr ,通过摆脱整个getWorkbook()方法和FileInputStream类,我能够减less内存的使用。

workbook = getWorkbook()更改为:

 workbook = WorkbookFactory.create(new File(excelFilePath)); 

它将创build适当的XSSFWorkbookHSSFWorkbook

来源: WorkbookFactory.create(…)