Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel文件读写的改进[POI,Java]_Java_Excel_Apache Poi - Fatal编程技术网

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

Excel文件读写的改进[POI,Java],java,excel,apache-poi,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(ne

是否有可能使用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();

提前多谢

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

如果有帮助的话,用缓冲你的输入,尽管我在测试中没有得到改进。按照@Gagravarr的建议,尝试使用File而不是FileInputStream打开工作簿

如果不知道打开的是Excel 97-2003还是Excel 2007+文件(不要根据文件扩展名猜测;最好是根据文件的前几个字节猜测),请使用,但需要使用FileInputStream以避免在关闭工作簿时修改工作簿的错误(即使不保存)

处理完流(
fin
!)后关闭流是一种很好的做法。不确定保持流打开是否会影响内存、系统文件处理资源或垃圾收集,但这可能会有所帮助。主要的问题是可读性:您正在清楚地表明您已经完成了对Stream对象的处理


最后,尽可能隐藏实现细节,即使是在本地。尽可能使用
OutputStream fout=新文件OutputStream(…)
覆盖
FileOutputStream fout=…
。Java是冗长的:类型声明定义变量遵守的契约。实例化选择将履行该契约的实现。

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

如果有帮助的话,用缓冲你的输入,尽管我在测试中没有得到改进。按照@Gagravarr的建议,尝试使用File而不是FileInputStream打开工作簿

如果不知道打开的是Excel 97-2003还是Excel 2007+文件(不要根据文件扩展名猜测;最好是根据文件的前几个字节猜测),请使用,但需要使用FileInputStream以避免在关闭工作簿时修改工作簿的错误(即使不保存)

处理完流(
fin
!)后关闭流是一种很好的做法。不确定保持流打开是否会影响内存、系统文件处理资源或垃圾收集,但这可能会有所帮助。主要的问题是可读性:您正在清楚地表明您已经完成了对Stream对象的处理


最后,尽可能隐藏实现细节,即使是在本地。尽可能使用
OutputStream fout=新文件OutputStream(…)
覆盖
FileOutputStream fout=…
。Java是冗长的:类型声明定义变量遵守的契约。实例化选择将实现该契约的实现。

改进什么?性能也一样。使用-更快+更低memory@BalajiKrishnan:我的目标是提高读写excel文件的时间。POI网站帮助了我,因为我想用不同的东西(例如NIO库中的FileChannel)代替“FileInput(Output)Stream”,而不是改变FileInput(Output)Stream的执行。改进什么?性能也一样。使用-更快+更低memory@BalajiKrishnan:我的目标是提高读写excel文件的时间。POI网站帮助了我,因为我想用不同的东西(例如NIO库中的FileChannel)代替“FileInput(输出)流”,而不是改变FileInput(输出)流的执行。