小编Ior*_*nov的帖子

Java Servlet:删除临时文件

我正在开发一个Java Servlet,它创建一个临时文件以在会话中使用.在会话结束时(即用户"注销"),我需要删除临时文件,然后将用户重定向到初始("登录")页面.重定向工作正常,但临时文件保持不变.

我认为它与文件的路径有关,但我不确定是什么.我在会话启动时创建文件:

String path = request.getSession().getServletContext().getRealPath("/");
File file = File.createTempFile("getter", ".html", new File(path + "/tmp/"));
Run Code Online (Sandbox Code Playgroud)

然后,当关闭会话时,我做:

file.delete();
Run Code Online (Sandbox Code Playgroud)

我知道file.deleteOnExit(),但是...什么时候退出servlet?也许我很困惑,但我肯定会感激任何帮助!:)

先感谢您!

编辑

所以,这里有一些细节:

我正在使用servlet,暂时没有处理会话.我同意@Joop我需要实现会话,但暂时只是想做一些简单的测试.

所以,我的servlet讨厌GETPOST请求.我在POST请求中使用一个标志来调用一个内部函数,该函数将文件(在类中声明为private File file;)实例化为新的临时文件.在连续调用时,将填充并保存文件.在用户看到的页面中,我有一个引用servlet的锚(对于'this',即),传递一个标志作为参数,一个标志指示'注销'.然后我调用另一个内部函数来删除先前实例化的文件.

如果这是一个问题,我将实施经理并发布我的发现.

编辑2

我实现了一个HttpSessionListener,似乎一切正常.现在,在创建会话时,我在我之前声明的目录中实例化一个文件(注意它不是临时文件,我使用,File file = new File(path + "/tmp/" + req.getSession().getId() + ".html");因此文件的名称等于会话ID).然后我向会话添加一个属性,其值是文件的完整路径.我一如既往地继续填充我的文件,当用户选择注销时,我使会话无效.然后,在侦听器内部,我检索文件的路径,因此我可以获取指向它的指针:

String fname = ev.getSession().getAttribute("filename").toString();
File f = new File(fname);
f.delete();
Run Code Online (Sandbox Code Playgroud)

所以,现在我得到消息是积极的,我的意思是f.delete()返回true,并在此之后我做f.exists(),我得到false.所以应该没问题.但是,文件实际存在,即它们仍然存在于磁盘上.

我可以试试@ A4L提供的这个例子.我做错了什么......?

java tomcat servlets

3
推荐指数
1
解决办法
9944
查看次数

标签 统计

java ×1

servlets ×1

tomcat ×1