是否有一个库来获取文件夹,对其内容进行快照,进行一些修改,然后直接从 java 程序(即不是从命令行)将其恢复到以前的状态?
编辑:基本上,我正在处理一个非常大的文件夹:80mb,~7000 个文件。而且我只想尽快恢复修改过的文件。仅将所有内容复制回来看起来很耗时。
是否有一个库来获取文件夹,对其内容进行快照,进行一些修改,然后直接从 java 程序(即不是从命令行)将其恢复到以前的状态?
编辑:基本上,我正在处理一个非常大的文件夹:80mb,~7000 个文件。而且我只想尽快恢复修改过的文件。仅将所有内容复制回来看起来很耗时。
我不知道您想要什么的非标准库,但是您可以尝试将目录的内容复制到临时目录中,并在完成后将其复制回来(并删除临时目录)。
对于您的编辑:您必须找到某种方法来跟踪或“标记”已修改的文件。也许用这样的“标志”属性扩展文件类?您可以将所有文件保存在内存中,但是如果这些目录变得太大,您将不得不担心内存不足。
是的!有足够的 API 功能来做到这一点!
您要拍摄递归快照吗?
我非常喜欢 groovy 语法:
currentDir.eachFileRecurse{ file ->
...}
不完全是Java,但减少了头痛......
public void before(String origDir, String tmpDir) {
try {
Runtime.getRuntime().exec("cp -pr " + origDir + " " + tmpDir).waitFor();
} catch (IOException err) {
...
}
}
public void after(String origDir, String tmpDir) {
try {
String rndDir = createRandomName();
Runtime.getRuntime().exec("mv " + origDir + " " + rndDir).waitFor();
Runtime.getRuntime().exec("mv " + tmpDir + " " + origDir).waitFor();
Runtime.getRuntime().exec("rm " + rndDir);
} catch (IOException err) {
...
}
}
我会看看apache-commons IO library。我特别使用了 DirectoryWalker,它非常方便递归地检查目录的内容。
观察目录(和子目录)的变化,积累它们,然后当你想撤销变化时,只复制变化的文件。
参见例如:
http://twit88.com/blog/2007/10/02/develop-a-java-file-watcher/