【发布时间】:2013-04-24 10:37:32
【问题描述】:
我希望使用 java 实现用于编辑/删除/移动等的撤消/重做文件/文件夹功能。这可能吗?
详细信息:我正在使用javaFileWatcher 观看给定的文件夹,我会从观察者那里收到一条消息,说明是否有任何文件/文件夹已创建/编辑/删除/重命名。现在我想如果任何用户删除/创建了任何文件/文件夹,我将能够使用 java 撤消它。任何人都可以帮忙。
注意:我使用的是windows
提前致谢。
【问题讨论】:
标签: java
我希望使用 java 实现用于编辑/删除/移动等的撤消/重做文件/文件夹功能。这可能吗?
详细信息:我正在使用javaFileWatcher 观看给定的文件夹,我会从观察者那里收到一条消息,说明是否有任何文件/文件夹已创建/编辑/删除/重命名。现在我想如果任何用户删除/创建了任何文件/文件夹,我将能够使用 java 撤消它。任何人都可以帮忙。
注意:我使用的是windows
提前致谢。
【问题讨论】:
标签: java
不可能,删除是最终的,没有像操作系统那样的回收站,你必须自己实现它。
【讨论】:
作为启动想法,请查看Command pattern。这通常是撤消/重做事情的实现方式。这个想法是,您可以将关于操作的所有“重要”内容存储到单个对象中,然后将它们存储在有序集合中。
在您的情况下,您想要监控 FS 而不是您自己的数据模型这一事实使事情变得非常困难。但是,如果您能负担得起冗余数据存储,那么我认为可以假设它可以完成。 (我建议您阅读 git SCM 的工作方式。我的意思是,它将所有内容存储在一个 .git 文件夹中,并且它能够从它存储的压缩数据中恢复其所谓的工作目录中的任何先前状态。)
实际上,如果您可以将 git 加入到您的程序中,那么它会容易得多。我认为您在要监督的目录中初始化了一个 git repo,然后每次收到有关某些 FS 更改的通知时,您都可以要求 git (git status) 告诉您哪些文件实际上已更改。甚至删除的文件也可以使用简单的 git 命令恢复。
这远不是您问题的完整答案,但是我可能已经给出了一些想法。祝你好运。
【讨论】:
git init,然后最初你必须git add .所有文件和git commit -m "initial state"第一个版本。然后改变一些东西,看看git status..