将xls文件从FileInputStream复制到FileWriter会破坏该文件

时间:2016-04-20 09:56:18

标签: java io filewriter

为什么当我尝试使用任何Writer实现来复制excel文件的内容时,文件的内容会被破坏!! 。

width: auto;

Test Result

我有一个需求,我需要将使用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")));
        }

2 个答案:

答案 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文件。

非常感谢你们