- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!