我可以使用Java将文件放入LInux Trash吗?

时间:2013-11-27 22:35:51

标签: java linux recycle-bin

我知道标准Java仍然没有提供将文件放入ecycle bin / trash而不是永久删除它们的标准方法。但幸运的是,有针对WIndows(jna)和OSX(com.apple.eio.FileManager)的解决方案。

但是对于Linux Dekstop有什么用途,如何在Linux上实现回收站,它只是一个我可以将文件移动到的标准目录吗?

3 个答案:

答案 0 :(得分:2)

Linux中的垃圾箱文件夹位于/home/username/.local/share/Trash。尝试将文件移动到该文件夹​​。

答案 1 :(得分:2)

两个最常见的Linux桌面环境(KDE,Gnome)使用freedesktop.org trash specification。对于最常见的情况,这包括$XDG_DATA_HOME/Trash下的目录结构。如果环境变量未设置或为空,则使用$HOME/.local/share

此目录下有两个目录:filesinfo。 files包含已删除的文件,而info包含一个桌面样式的文件,该文件提供有关已删除文件的信息,例如它的原始名称和位置。请注意,files/中的文件不必包含文件的原始名称(例如,在文件名冲突的情况下)。 info目录中有一个匹配的.trashinfo文件,其基本名称必须files/中的条目匹配,例如foo中名为files/的文件} foo.trashinfo中会有相应的info/

.trashinfo文件的内容:

[Trash Info]
Path=<original path to file e.g. foo/bar/baz.txt>
DeletionDate=<Date file was deleted in RFC3339 format (YYYYMMDDTHH:MM:SS)>

必须拥有这些行,否则会出现格式错误。

规范中的注释指出:

  

当废弃文件或目录时,实现必须首先在$ trash / info中创建相应的文件。在废弃文件或目录时,实现必须首先在$ trash / info中创建相应的文件。此外,它必须尝试以原子方式执行此操作,以便如果两个进程尝试具有相同文件名的垃圾文件,这将导致两个不同的垃圾文件。在Unix系统上,这是通过生成文件名,然后使用O_EXCL打开来完成的。如果成功,则创建是原子的(至少在同一台机器上),如果失败,则需要选择另一个文件名。

所以你必须以这种方式执行垃圾处理操作。

这似乎是一个相对简单的Java练习,所以一旦你理解了它是如何完成的,就去吧!

在kde中还有kfmclient CLI工具,可以这样使用:

kfmclient move <file> trash:/

为你做的工作。不过,我不知道一个gnome等价物。

答案 2 :(得分:0)

您可以使用libtrash,最有可能来自您的软件包管理器。

如果配置正确,它会为所有程序和命令添加回收站功能。