gpt4 book ai didi

java - 删除File后FileOutputStream该怎么办

转载 作者:行者123 更新时间:2023-12-01 16:21:07 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 开发一种方法,将多个 .pfd 文件连接成一个文件并返回其字节数组:

public byte[] concatDocs() {
List<Doc> documents = getAllDocs();

PDFMergerUtility ut = new PDFMergerUtility();

String nameOfTemporaryFile = "temporaryFile.pdf";

File file = new File(nameOfTemporaryFile);

FileOutputStream out = null;

try {
out = new FileOutputStream(file);

for (Doc doc : documents) {
InputStream is = new ByteArrayInputStream(doc.getFile());
ut.addSource(is);
}

ut.setDestinationStream(out);
ut.mergeDocuments(null);

byte[] fileBytes = Files.readAllBytes(file.toPath());

file.delete();

return fileBytes;
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

代码本身工作完美:它获取Doc列表,创建临时File以及FileOutputStream(来自 java.io),使用PDFMergerUtility合并文件并生成字节数组,最后从计算机中删除文件。我的问题是:

我在互联网上看到的与 I/O Stream 一起使用的每个代码最终都会关闭它们(使用 stream.close()),但我从未找到一个很好的解释来解释为什么他们总是这样做...
我应该在 readAllBytes 之前关闭 out 吗?
我应该在删除文件之前还是之后关闭out
当我删除文件时,我是否需要关闭out
如果抛出异常怎么办?我应该在 finally 子句上关闭 out 吗?
我应该在某个地方 out.flush() 吗?
我应该调用System.gc();吗?

提前致谢。

最佳答案

为了避免任何数据泄漏,最好关闭资源。在 Java-7 中,我们提供了尝试资源功能,您可以使用它。try-with-resources – 允许我们声明在 try block 中使用的资源,并保证在执行该 block 后资源将被关闭。您可以在这里找到更多相关信息
https://mkyong.com/java/try-with-resources-example-in-jdk-7/
https://www.baeldung.com/java-try-with-resources

关于java - 删除File后FileOutputStream该怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62274565/

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