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(); 但他们都没有工作.
file.deleteOnExit()不会产生你想要的结果 - 它的目的是在JVM退出时删除文件 - 如果从servlet调用它,这意味着在服务器关闭时删除文件.
至于为什么file.delete()不起作用 - 我在这段代码中看到的只是从文件中读取并写入servlet的输出流 - 当你将数据写入文件时,你可以保留文件的输入流打开?如果文件当前正在使用,则不会删除这些文件.
此外,即使您的方法抛出IOException,如果在访问文件时出现异常,仍需要清理内容 - 将文件操作放在try块中,并将stream.close()放入finally块中.