为什么当我尝试使用任何Writer实现来复制excel文件的内容时,文件的内容会被破坏!! 。
width: auto;
我有一个需求,我需要将使用Apache Poi API创建的工作簿编写到Writer实现中!!我坚持这个问题!!有人可以帮忙吗?!!
更新:
我理解问题是当我尝试将字节流转换为char流时。但我不明白为什么。
这个测试也失败了!!
@Test
public void testExcelCopy1() throws FileNotFoundException, IOException {
IOUtils.copy(new FileInputStream(new File("d:\\temp\\123.xls")), new OutputStreamWriter(
new FileOutputStream("d:\\temp\\1234.xls")));
Assert.assertArrayEquals(FileUtils.readFileToByteArray(new File("d:\\temp\\123.xls"))
, FileUtils.readFileToByteArray(new File("d:\\temp\\1234.xls")));
}
@Test
public void testExcelCopy2() throws FileNotFoundException, IOException {
IOUtils.copy(new FileInputStream(new File("d:\\temp\\123.xls")), new FileOutputStream("d:\\temp\\12345.xls"));
Assert.assertArrayEquals(FileUtils.readFileToByteArray(new File("d:\\temp\\123.xls"))
, FileUtils.readFileToByteArray(new File("d:\\temp\\12345.xls")));
}
答案 0 :(得分:0)
IOUtils中的方法不会在任何可能的情况下自行刷新或关闭流。调用者被认为有责任关闭流。
请冲洗并关闭溪流并尝试!
只要有可能,此类中的方法不会刷新或关闭 流。这是为了避免对此进行不可移植的假设 溪流的起源和进一步使用。因此呼叫者仍然负责 用于在使用后关闭流。
https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html
答案 1 :(得分:0)
我现在明白,使用任何仅适用于文本文件的基于字符的阅读器尝试阅读Excel或任何其他OLE2对象的内容在技术上是不正确的。我解决了我的问题。谢谢
底线是Reader和Writer仅适用于txt,xml,json,csv等,不适用于doc,xls或任何其他ms office文件。
非常感谢你们