代码之家  ›  专栏  ›  技术社区  ›  Jen A

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

  •  9
  • Jen A  · 技术社区  · 16 年前

    仅供参考,我没有使用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;
     }
    }
    
    3 回复  |  直到 16 年前
        1
  •  16
  •   Chris Dail    15 年前

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

    private DataHandler handler;
    

    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堆栈只读取文件一次,所以它可以工作。

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

        2
  •  0
  •   Steven M. Cherry    16 年前

    File script = File.createTempFile("temp", ".tmp", new File("./"));
    ... use the file ...
    script.delete(); // delete when done.
    
        3
  •  0
  •   anjanb    16 年前

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