5i需要将HSSFWorkbook(Apache的POI)转换为ByteArray,然后再将ByteArray转换回HSSFWorkbox。下面的测试用例说明了我的问题:
@Test
public void testXLSExportImport(){
try {
InputStream is = new FileInputStream(FILEPATH);
HSSFWorkbook wb = new HSSFWorkbook(is);
byte[] exported = wb.getBytes();
HSSFWorkbook wb2 = new HSSFWorkbook(new ByteArrayInputStream(exported));
//in the line above the exception is thrown
} catch (Exception e) {
assertTrue(false);
}
}
测试用例失败,返回异常:java.io.IOException:无效的头签名;读取0x0005060000100809,应为0xE11AB1A1E011CFD0
(我使用的是阿帕奇POI 3.5beta3)
我希望有人能帮我…我该怎么做?!
您没有正确编写工作簿!您需要使用write(Outputstream)调用。
如网站上的各种示例所示,您的代码应该是:
InputStream is = new FileInputStream(FILEPATH);
HSSFWorkbook wb = new HSSFWorkbook(is);
ByteArrayOutputStream out = new ByteArrayOutputStream();
wb.write(out);
HSSFWorkbook wb2 = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
另外,不要从FileInputStream打开工作簿,如果你有一个直接使用它的文件。从文件打开比从流打开使用更少的内存。