如何实现“回收站”功能?

时间:2011-05-20 13:44:18

标签: java

我正在开发一个Java桌面应用程序,我需要在其中实现回收站功能。目前:

  1. 我使用桌面应用程序将文件复制到名为recycle bin的文件夹,然后删除原始文件。
  2. 我将目标路径存储在删除文件的文本文件中,只是将文件还原到原始位置。
  3. 在恢复文件时,我只是将该文件移动到原始位置。
  4. 我的问题是,当从不同位置删除具有相同名称的文件时,所有移动到我创建的回收站文件夹的文件和具有相同名称的旧文件都将被覆盖。


    我该如何解决这个问题?另外,还有其他方法可以获得类似于回收站的功能吗?

3 个答案:

答案 0 :(得分:5)

删除文件时:

  1. 生成随机数。
  2. 检查bin中是否已存在具有该名称的文件。如果是,请转到1.
  3. 将文件复制到bin目录,但使用随机数作为文件名。
  4. 将原始文件名和随机数存储在文本文件中。
  5. 删除原文。
  6. 注意如果您有多个应用程序/线程同时执行此操作,则会出现此问题。

    “恢复”文件所需的所有信息都在文本文件中,并且您避免了重复的名称问题。

    为了更好地抵御并发使用,如果您使用Java 1.5或更高版本,请考虑使用java.util.UUID而不是“哑”随机数作为回收文件名。不能保证是安全的AFAIK,但在大多数情况下它应该足够好(特别是如果机器上只有一个真正的用户正在运行)。

    最后,确保在删除之前已经在上面的步骤3和4中关闭了输出流,并确保它们没有抛出任何异常 - 否则您可能会丢失数据。 (恢复时也一样:在删除已回收的文件流之前关闭已恢复的文件流。)

答案 1 :(得分:2)

每当需要将文件移动到回收站时,

  1. 使用密钥重命名并将其存储在回收站文件夹中
  2. 同时将此密钥映射到文本文件中文件的位置。
  3. 现在,当用户要求恢复时,使用密钥从txt获取确切位置并将其恢复。

答案 2 :(得分:0)

文件名或绝对文件名“c.programs.file-to-be-deleted.xls”不是唯一的。你想要的是唯一文件ID ,它是为每个需要与已删除文件对象一起存储的文件生成的。

当用户尝试从回收站重新/取消删除文件时,您将使用文件ID而不是文件名进行操作。