JVM is crashing while trying to write to the .xlsx file. I am using POI(XSSF) for the same. The error location point in code is the write method--> workBook.write(fileOutputStream);

On Console I get..

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.
有帮助吗?

解决方案

The solution I've found for this, and I've been looking for a while, is to make sure you don't open your Workbook with the File which you use to open the FileOutputStream to save the Workbook. Instead, use a FileInputStream to open the Workbook.

Something like this will work flawlessly

        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);

Don't forget to close every opened stream and the OPCPackage.

其他提示

None of the other solutions worked for me. I only needed readonly access to my Excel files, and setting the readonly flags worked for me:

Workbook wb = new XSSFWorkbook(OPCPackage.open(file, PackageAccess.READ));
Workbook wb = new HSSFWorkbook(new POIFSFileSystem(file, true));

Using OPCPackage did not fix the JVM crash for me but using WorkbookFactory did. If you look at the POI Busy Developers Guide they provide example of reading and writing the same Excel file.

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();

Using Apache POI version 3.13, Java 1.8

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top