gpt4 book ai didi

java - 关闭 struts 流结果使用的 FileInputStream

转载 作者:搜寻专家 更新时间:2023-11-01 02:14:54 25 4
gpt4 key购买 nike

我的网络应用程序生成一个 XML 文件。我正在使用 Struts2 流结果来管理下载,这是 struts.xml 中的操作:

<action name="generateXML" class="navigation.actions.GenerateXML">
<result type="stream">
<param name="contentType">text/xml</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">1024</param>
</result>
...
</action>

这是创建 FileInputStream“inputStream”的操作类“GenerateXML”的一部分:

public String execute() {
File xml = new File(filename);
...//fill the file with stuff
try {
setInputStream(new FileInputStream(xml));
} finally {
//inputStream.close();
xml.delete();
}
}

删除文件将不起作用,因为 inputStream 尚未关闭(该部分已被注释掉)。但是,如果我此时关闭它,则用户下载的 xml 文件为空,因为它的流在 struts 生成下载之前已关闭。除了使用定期删除服务器上这些临时文件的脚本之外,是否有办法在 struts 完成其操作后关闭“inputStream”?

最佳答案

关闭输入流时没有删除,但您可以编写自己的。参见 is there an existing FileInputStream delete on close? .

想法是您不传递 FileInputStream,而是传递 ClosingFileInputStream,它会覆盖关闭并在调用关闭时删除文件。 close() 将由 struts 调用:

public String execute() {    
File xml = new File(filename);
...//fill the file with stuff
setInputStream(new ClosingFileInputStream(xml));
}

有关更多信息,请参阅链接的问题。

关于java - 关闭 struts 流结果使用的 FileInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267458/

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