改进读写Excel文件[POI,Java]

时间:2016-02-17 09:41:24

标签: java excel apache-poi

是否有可能使用POI库和Java改进对excel文件的读写? 现在我的代码看起来像这样:

//Reading a file
FileInputStream fin = new FileInputStream(new File(localizationOfExcelFile));
Workbook workbook = new XSSFWorkbook(fin);

//Writing to a file
FileOutputStream fout = new FileOutputStream(new File(localizationOfExcelFile));
workbook.write(fout);
fout.close();

提前多多感谢!

1 个答案:

答案 0 :(得分:2)

如果您正在写入高延迟系统(例如联网硬盘驱动器),则应使用BufferedOutputStream缓冲输出。我通过缓存写入Windows上的网络硬盘驱动器,将写入时间提高了一个数量级,同时缓冲了对本地硬盘驱动器的写入的可忽略不计的惩罚。性能可能因硬盘写入缓存,操作系统和延迟而异,因此如果其他人将使用您的应用程序,请不要仅针对您的设置进行优化。

如果有帮助,请用BufferedInputStream缓冲您的输入,尽管我的测试没有改善。正如@Gagravarr建议的那样,尝试使用File而不是FileInputStream打开工作簿。

如果您不知道是否要打开Excel 97-2003或Excel 2007+文件(不要根据文件扩展名进行猜测;基于文件的前几个字节的猜测是优越的),请使用WorkbookFactory.create,尽管您需要使用FileInputStream来避免在关闭工作簿时修改工作簿的bug(即使不保存)。

最好在完成后关闭你的溪流(fin!)。不确定是否打开Streams会对内存,系统文件句柄资源或垃圾回收产生影响,但它可能有所帮助。主要的是可读性:您已经明确表示已完成Stream对象。

最后,尽可能隐藏实现细节,甚至是本地隐藏。尽可能使用OutputStream fout = new FileOutputStream(...)而不是FileOutputStream fout = ...。 Java是冗长的:类型声明是定义变量所遵循的契约。实例化选择将履行该合同的实现。