我正在阅读Poi(3.7)的excel文件。我在这个链接Poi Quick Guide学习关于poi的一些事情。现在我关注的是:
打开工作簿(.xls HSSFWorkbook或.xlsx XSSFWorkbook)时,可以从File或InputStream加载工作簿。使用File对象可以降低内存消耗,而InputStream需要更多内存,因为它必须缓冲整个文件
在Poi的3.7版本中,WorkbookFactory没有以下方法
WorkbookFactory.create(新文件(" MyExcel.xls"))
我尝试以这些方式加载我的文件:
第一种方式
InputStream is = (InputStream) getClass().getResourceAsStream("/MyExcel.xlsx");
Workbook wb = WorkbookFactory.create(is);
第二种方式
String path = getClass().getResource("/MyExcel.xlsx").getPath();
FileInputStream fis = new FileInputStream(new File(path));
Workbook wb = WorkbookFactory.create(fis);
现在我想问你,加载excel文件这三种可能性的背景差异是什么?您建议中的哪一个?
答案 0 :(得分:0)
如果您的文件位于文件系统中,第一种方法是好的。第二种方式实际上是错的。如果您的文件是应用程序的一部分,即从类路径中获得,请使用以下代码:
Workbook wb = WorkbookFactory.create(getClass().getResourceAsStream("/MyExcel.xlsx").getPath());
您的代码有什么问题?实际上它只有在您的类直接位于文件系统中时才有效。但是如果将它们打包到jar中,则行new FileInputStream(new File(path))
将抛出FileNotFoundException
,因为文件确实不存在于文件系统中但是打包到jar中。
答案 1 :(得分:-1)
使用InputStream比使用File
具有更高的内存占用