gpt4 book ai didi

java - java中使用FileOutputStream覆盖文件

转载 作者:行者123 更新时间:2023-11-30 06:20:43 25 4
gpt4 key购买 nike

我正在尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com