如何/何时删除java中的文件?

Rak*_*yal 1 java jsp file java-ee

问题是,用户单击JSP中的按钮,该按钮将导出显示的数据.所以我正在做的是创造一个温度.将文件内容写入其中[resultSet >> xml >> csv],然后将内容写入ServletResponse.关闭响应输出流后,我尝试删除该文件,但每次返回false.

码;

public static void writeFileContentToResponse ( HttpServletResponse response , String fileName ) throws IOException{

        ServletOutputStream responseoutputStream = response.getOutputStream();
        File file = new File(fileName);
        if (file.exists()) {
            file.deleteOnExit();

            DataInputStream dis = new DataInputStream(new FileInputStream(
                    file));

            response.setContentType("text/csv");
            int size = (int) file.length();
            response.setContentLength(size);
            response.setHeader("Content-Disposition",
                    "attachment; filename=\"" + file.getName() + "\"");         
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-control", "must-revalidate");

            if (size > Integer.MAX_VALUE) {

            }
            byte[] bytes = new byte[size];

            dis.read(bytes);
            FileCopyUtils.copy(bytes, responseoutputStream );
        }
        responseoutputStream.flush();
        responseoutputStream.close();
        file.delete();
    }
Run Code Online (Sandbox Code Playgroud)

我用过'file.deleteOnExit();' 和file.delete(); 但他们都没有工作.

Nat*_*ate 5

file.deleteOnExit()不会产生你想要的结果 - 它的目的是在JVM退出时删除文件 - 如果从servlet调用它,这意味着在服务器关闭时删除文件.

至于为什么file.delete()不起作用 - 我在这段代码中看到的只是从文件中读取并写入servlet的输出流 - 当你将数据写入文件时,你可以保留文件的输入流打开?如果文件当前正在使用,则不会删除这些文件.

此外,即使您的方法抛出IOException,如果在访问文件时出现异常,仍需要清理内容 - 将文件操作放在try块中,并将stream.close()放入finally块中.