无法将HSSFWorkbook写入ByteArray,然后再将其读取到HSSFWorkbench



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打开工作簿,如果你有一个直接使用它的文件。从文件打开比从流打开使用更少的内存。

相关内容

  • 没有找到相关文章

最新更新