4

JVM 在尝试写入 .xlsx 文件时崩溃。我也在使用 POI(XSSF)。代码中的错误位置点是写method--> workBook.write(fileOutputStream);

在控制台上我得到..

A fatal error has been detected by the Java Runtime Environment:
  SIGBUS (0x7) at pc=0xb68d77f3, pid=14653, tid=1849355120
  JRE version: 7.0_04-b20
 Java VM: Java HotSpot(TM) Server VM (23.0-b21 mixed mode linux-x86 )
 Problematic frame:
 C  [libzip.so+0x47f3]  newEntry+0x73
 Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
 If you would like to submit a bug report, please visit:
   http://bugreport.sun.com/bugreport/crash.jsp
 The crash happened outside the Java Virtual Machine in native code.
 See problematic frame for where to report the bug.
4

3 回答 3

10

我为此找到的解决方案,并且我一直在寻找一段时间,是确保您不要Workbook使用File用于打开FileOutputStream保存Workbook. 相反,使用 aFileInputStream打开Workbook.

这样的事情将完美无缺

        File inputFile = new File("Your-Path");
        this.inputStream = new FileInputStream(inputFile);
        this.opc = OPCPackage.open(this.inputStream);
        this.workbook = WorkbookFactory.create(opc);

...

        this.outputStream = new FileOutputStream(inputFile);
        this.workbook.write(this.outputStream);

不要忘记关闭每个打开的流和OPCPackage.

于 2013-06-26T19:53:57.913 回答
1

其他解决方案都不适合我。我只需要对我的 Excel 文件进行只读访问,并且设置只读标志对我有用:

Workbook wb = new XSSFWorkbook(OPCPackage.open(file, PackageAccess.READ));
Workbook wb = new HSSFWorkbook(new POIFSFileSystem(file, true));
于 2017-08-15T16:59:11.733 回答
0

使用OPCPackage并没有为我修复 JVM 崩溃,但使用WorkbookFactory确实。如果您查看POI Busy Developers Guide,它们提供了读取和写入相同 Excel 文件的示例。

File excelFile = new File("workbook.xlsx");

InputStream inp = new FileInputStream(excelFile);
Workbook wb = WorkbookFactory.create(inp);

FileOutputStream fileOut = new FileOutputStream(excelFile);
wb.write(fileOut);
fileOut.close();

使用 Apache POI 3.13 版、Java 1.8

于 2016-02-25T18:22:51.780 回答