程序暂停尝试读取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适当的XSSFWorkbook
或HSSFWorkbook
。
来源: WorkbookFactory.create(…)