Java Tomcat 6:如何在web方法调用结束后删除临时文件?

Java Tomcat 6:如何在web方法调用结束后删除临时文件?,java,web-services,tomcat,jax-ws,Java,Web Services,Tomcat,Jax Ws,我有一个临时文件,其中包含通过MTOM二进制附件作为SOAP响应的一部分返回的数据。我想在方法调用“结束”(即完成传输)后立即将其丢弃。对我来说最好的方法是什么?我能找到的最好的方法是在会话被破坏时删除它们,但我不确定是否有更“直接”的方法 仅供参考,我没有使用Axis,我使用的是jax ws,如果这很重要的话 更新:我不确定回答者是否真正理解这个问题。我知道如何用java删除文件。我的问题是: @javax.jws.WebService public class MyWebService {

我有一个临时文件,其中包含通过MTOM二进制附件作为SOAP响应的一部分返回的数据。我想在方法调用“结束”(即完成传输)后立即将其丢弃。对我来说最好的方法是什么?我能找到的最好的方法是在会话被破坏时删除它们,但我不确定是否有更“直接”的方法

仅供参考,我没有使用Axis,我使用的是jax ws,如果这很重要的话

更新:我不确定回答者是否真正理解这个问题。我知道如何用java删除文件。我的问题是:

@javax.jws.WebService 
public class MyWebService {
...

 @javax.jws.WebMethod 
 public MyFileResult getSomeObject() {
   File mytempfile = new File("tempfile.txt");
   MyFileResult result = new MyFileResult();
   result.setFile(mytempfile);  // sets mytempfile as MTOM attachment

   // mytempfile.delete() iS WRONG
   // can't delete mytempfile because it hasn't been returned to the web service  client
   // yet.  So how do I remove it?

   return result;
 }
}

您使用的是标准java临时文件吗?如果是,您可以这样做:

File script = File.createTempFile("temp", ".tmp", new File("./"));
... use the file ...
script.delete(); // delete when done.

在您正在谈论的此Web应用的上下文中设置的工作文件夹。你能在一个已知的目录中设置这个工作目录吗?如果是,那么您可以在临时工作目录(您知道的)中找到临时文件。一旦找到,就可以删除它。

我遇到了同样的问题。问题在于JAX-WS堆栈管理该文件。无法在代码中确定JAX-WS何时处理完该文件,因此您不知道何时删除它

在我的例子中,我在对象模型上使用DataHandler,而不是文件。MyFileResult将具有以下字段而不是文件字段:

private DataHandler handler;
我的解决方案是创建自定义版本的FileDataSource。我没有返回FileInputStream来读取文件内容,而是返回FileInputStream的以下扩展名:

private class TemporaryFileInputStream extends FileInputStream {
    public TemporaryFileInputStream(File file) throws FileNotFoundException {
        super(file);
    }

    @Override
    public void close() throws IOException {
        super.close();
        file.delete();
    }
}
实际上,数据源只允许读取一次。关闭流后,文件将被删除。因为JAX-WS堆栈只读取文件一次,所以它可以工作


这个解决方案有点麻烦,但在这种情况下似乎是最好的选择。

对不起,也许我应该更具体一些。我可以在什么时候删除该文件?我不能直接使用@WebMethod注释函数,因为还没有返回web方法响应。我喜欢这个解决方案!我的方法是将该文件添加到会话变量中,然后在用户会话过期时删除该文件。我还进行了额外的检查以删除finalize()中的文件。