我正在开发一个Java桌面应用程序,我需要在其中实现回收站功能。目前:
我的问题是,当从不同位置删除具有相同名称的文件时,所有移动到我创建的回收站文件夹的文件和具有相同名称的旧文件都将被覆盖。
我该如何解决这个问题?另外,还有其他方法可以获得类似于回收站的功能吗?
答案 0 :(得分:5)
删除文件时:
(注意:如果您有多个应用程序/线程同时执行此操作,则会出现此问题。)
“恢复”文件所需的所有信息都在文本文件中,并且您避免了重复的名称问题。
为了更好地抵御并发使用,如果您使用Java 1.5或更高版本,请考虑使用java.util.UUID
而不是“哑”随机数作为回收文件名。不能保证是安全的AFAIK,但在大多数情况下它应该足够好(特别是如果机器上只有一个真正的用户正在运行)。
最后,确保在删除之前已经在上面的步骤3和4中关闭了输出流,并确保它们没有抛出任何异常 - 否则您可能会丢失数据。 (恢复时也一样:在删除已回收的文件流之前关闭已恢复的文件流。)
答案 1 :(得分:2)
每当需要将文件移动到回收站时,
现在,当用户要求恢复时,使用密钥从txt获取确切位置并将其恢复。
答案 2 :(得分:0)
文件名或绝对文件名“c.programs.file-to-be-deleted.xls”不是唯一的。你想要的是唯一文件ID ,它是为每个需要与已删除文件对象一起存储的文件生成的。
当用户尝试从回收站重新/取消删除文件时,您将使用文件ID而不是文件名进行操作。