Java 在向输出流写入两次时,POI会损坏文件
我的要求是创建一个工作簿对象,然后将xlsx文件保存到文件系统,然后将同一工作簿对象作为电子邮件附件发送 我所做的: 创建工作簿对象:Java 在向输出流写入两次时,POI会损坏文件,java,apache-poi,Java,Apache Poi,我的要求是创建一个工作簿对象,然后将xlsx文件保存到文件系统,然后将同一工作簿对象作为电子邮件附件发送 我所做的: 创建工作簿对象: XSSFWorkbook workBook = excelGenerator.createWorkBook(output); saveToFile(input, workBook); mailSender.sendNotificationWithAttachment(input, excelGenerator.saveToByteArray(workBook
XSSFWorkbook workBook = excelGenerator.createWorkBook(output);
saveToFile(input, workBook);
mailSender.sendNotificationWithAttachment(input, excelGenerator.saveToByteArray(workBook), emailId);
其中saveToFile():
saveToByteArray():
workBook = new XSSFWorkbook(new FileInputStream(metricFile));
从你的描述来看,这听起来真的像一个最近也咬了我的POI bug,即。POI 3.11-beta1中对其进行了固定,并于2014年12月21日发布了稳定的POI 3.11版本。所以我认为你最好的策略是升级你的POI版本,而不是试图制造一些黑客来解决这个问题 您正在使用Java7+?如果是,为什么不使用java.nio.file?您使用哪一版本的POI?我使用的是POI 3.10,是的,我使用的是Java7,我想问题在于POI工作簿写入方法。或者我应该尝试使用nio.file firstproblem与nio包无关。应该弄清楚如何使用
write
方法两次而不发生损坏。因为调用write
方法时使用了相同的对象,这可能会导致issue@ViMatviichuk是的,这与nio无关,但2015年编写的新代码仍然使用文件,这是另一个问题。java.nio.file现在已经有4年历史了,而且比以前好多了。感谢您,POI 3.11版本似乎运行得很好
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
try {
workBook.write(byteOutputStream);
} catch (IOException e) {
}
return byteOutputStream;
workBook = new XSSFWorkbook(new FileInputStream(metricFile));