读取后无法删除文件

时间:2010-01-26 22:36:17

标签: java jsp file-io

我正在从文件系统dynamically with a jsp

提供文件

这是我的代码:

<%@ page import="java.io.*,java.util.*"
    InputStream in = null;
    OutputStream responseOut = null;
    File  file  = new File(request.getAttribute("fileToServe"));
    try{
        in = new FileInputStream(file);
        responseOut = response.getOutputStream();
        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            responseOut.write(buf, 0, len);
        }
    }finally{
         if( responseOut != null ) try {
            responseOut.close();
         } catch( IOException ioe ){}

        if( in != null ) try {
            in.close();
         } catch( IOException ioe ){}
    }
    file.delete();
%>

我遇到的问题是,文件只在第一次运行代码时被删除,这是在服务器重启之后。后续调用不会删除该文件。

我使用ProcessExplorer来跟踪这个,而且,Java VM正在保存该文件,我真的不知道为什么会发生这种情况。

我们将在Windows操作系统上运行,总是有解决方法吗?

我在互联网上找到了一些关于此的资源,但我无法从中找出如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

什么创建文件?我只看到读取然后在该代码中删除它。

需要注意的事项:

  • 读取文件需要文件的读取权限,但删除文件需要来自目录的写入权限;和
  • 确保close()您创建的所有文件。如果不这样做,您可能会丢失数据,或者可能需要一些时间来清除隐式关闭。

最后,使用来自用户的fileToServe等属性非常危险。我希望你在其他地方消毒。您应确保仅以这种方式提供允许的文件。

答案 1 :(得分:1)

好的,我在cletus评论后检查了创建此文件的位置。编写该文件的流上的close方法丢失了。

神秘解决了

cletus,请添加你的答案,以便我接受