我尝试删除目录中的文件,但在jsf托管bean中失败。 有人可以帮忙吗?非常感谢。
下面是我的xhmtl代码
#{incomingCheckList.checkImage(result.imageURL)}
<p:graphicImage value="#{incomingCheckList.image}" stream="false" styleClass="checkListImageSize"/>
#{incomingCheckList.closeStream()}
以下是我的托管Bean代码
private StreamedContent image;
public void checkImage(String attachment) throws IOException {
FileInputStream in = new FileInputStream(new File(attachment));
image = new DefaultStreamedContent(new FileInputStream(new File(attachment)));
}
public void closeStream() throws IOException {
try {
image.getStream().close();
System.out.println("closed");
} catch (Exception e) {
System.out.println("exception");
}
}
以下是我的删除代码
for (int i = 0; i < allCheckList.size(); i++) {
if (allCheckList.get(i).isDeleteOrNot()) {
File file = new File(fileUploadPath + "/incomingCheckList/" + allCheckList.get(i).getComponentPhoto());
try {
Files.delete(file.toPath());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
读取并关闭流后,我尝试删除我的图像文件。 但它告诉我错误说,由于资源正在使用,无法删除图像文件。 请帮忙。 感谢
答案 0 :(得分:1)
在public void checkImage(String attachment)
方法中,您可以执行以下操作:
FileInputStream
File
FileInputStream
创建 全新 File
,然后将其传递给new DefaultStreamedContent()
以创建您的图片。 然后,稍后,您只关闭该图像的输入流。
您创建的第一个FileInputStream
只会在收集垃圾时关闭,并且无法保证何时或 发生。
您犯了这个错误的事实意味着您没有收到有关未使用的局部变量in
的警告。这反过来意味着您尝试在未启用警告的情况下进行编程。不要这样做。除非你首先启用尽可能多的警告,否则你不会走得太远,然后确保你的代码永远不会产生任何警告。