当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Tomcat6:如何在Web方法调用结束后删除临时文件?》经验,为你挑选了1个好方法。

我有一个临时文件,其中包含通过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;
 }
}

Chris Dail.. 15

我遇到了同样的问题.问题是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堆栈只读取一次文件,因此可以正常工作.

解决方案有点像黑客,但在这种情况下似乎是最好的选择.



1> Chris Dail..:

我遇到了同样的问题.问题是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堆栈只读取一次文件,因此可以正常工作.

解决方案有点像黑客,但在这种情况下似乎是最好的选择.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有