java - java中使用FileOutputStream覆盖文件

标签 java spring file

我正在尝试将 pdf 文档的特定页面的内容写入另一个文件。我正在尝试使用下面的代码

ByteArrayInputStream[] stream = pdfFileEditorObj
                    .splitToBulks("E:\\JavaProjects\\docs\\Latest\\Workflow_Services.pdf", numberOfPage);
OutputStream out = new FileOutputStream("E:\\JavaProjects\\docs\\Latest\\Workflow_Services1.pdf", true);

    for (ByteArrayInputStream bStream : stream) {
         IOUtils.copy(bStream, out);
         out.flush();
         out.close();

    }

但它会覆盖现有文件。我只能看到最后一页内容。

任何人都可以帮忙解决这个问题吗?提前致谢

最佳答案

您不能像您所做的那样,仅通过将流的二进制内容附加到文件末尾来将页面添加到 PDF 文档。 PDF 文件包含元数据,您需要如此对待它们。不要将字节流附加到文件末尾,而是使用 concatenate :

ByteArrayInputStream[] streams = pdfFileEditorObj
                    .splitToBulks("E:\\JavaProjects\\docs\\Latest\\Workflow_Services.pdf", numberOfPage);

pdfFileEditorObj.concatenate(streams, new FileOutputStream("E:\\JavaProjects\\docs\\Latest\\Workflow_Services1.pdf");

上面创建了一个新文件。如果您想将页面附加到现有文件:

  1. 读取现有文件并创建流的 ArrayList。

  2. 将要附加到文件的流数组附加到该 ArrayList。

  3. 使用新数组调用连接。

关于java - java中使用FileOutputStream覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208177/

相关文章:

java - SpringBoot 在 Eclipse Luna 中通过 Spring Tool Suite 构建不工作的项目

c++ - 重用 C++ 头文件

file - 如何通过管道将 STDERR 传输到文件

java - 具有非必需变量的构造函数

java - 我可以在 Java 的 lambda 中省略参数名称吗

java - Spring MVC HTTP 错误 500 : Servlet. init() 的 servlet 通知抛出异常

java - 背景 : url(images/2. png)在 style.css 中不起作用

javascript - 如何将文件输入克隆到隐藏 iframe 中的另一个文件输入

java - 如何使用 Spring REST 和复杂的查询参数?

java - 推断类型不符合不相关变量的等式约束错误