文件与InputStreams

时间:2014-07-08 10:48:05

标签: java apache-poi

我正在阅读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文件这三种可能性的背景差异是什么?您建议中的哪一个?

2 个答案:

答案 0 :(得分:0)

如果您的文件位于文件系统中,第一种方法是好的。第二种方式实际上是错的。如果您的文件是应用程序的一部分,即从类路径中获得,请使用以下代码:

Workbook wb = WorkbookFactory.create(getClass().getResourceAsStream("/MyExcel.xlsx").getPath());

您的代码有什么问题?实际上它只有在您的类直接位于文件系统中时才有效。但是如果将它们打包到jar中,则行new FileInputStream(new File(path))将抛出FileNotFoundException,因为文件确实不存在于文件系统中但是打包到jar中。

答案 1 :(得分:-1)

使用InputStream比使用File

具有更高的内存占用