【问题标题】:In java: Take snapshot of a directory and restore it在java中:拍摄目录的快照并恢复它
【发布时间】:2010-11-21 02:01:33
【问题描述】:

是否有一个库来获取文件夹,对其内容进行快照,进行一些修改,然后直接从 java 程序(即不是从命令行)将其恢复到以前的状态?

编辑: 基本上,我正在处理一个非常大的文件夹:80mb,~7000 个文件。 而且我只想尽快恢复修改过的文件。 仅将所有内容复制回去看起来很耗时。

【问题讨论】:

  • 您能否详细说明如何修改这些文件?有人可能只是触摸文件吗?是否有人替换了一个字节,但将文件日期设置回原始值?
  • 基本上,现有文件将被修改,新文件将被添加,其他文件将被删除。这用于对安装过程进行功能测试。

标签: java filesystems directory restore snapshot


【解决方案1】:

我不知道您想要什么非标准库,但您可以尝试将目录的内容复制到临时目录中,并在完成后将其复制回来(并删除临时目录)。

Take a look at java.io.File

And here is another library specifically for copying files/folders.

对于您的编辑:您必须找到某种方法来跟踪或“标记”已修改的文件。也许用这样的“标志”属性扩展文件类?您可以将所有文件保存在内存中,但是如果这些目录变得太大,您将不得不担心内存不足。

【讨论】:

    【解决方案2】:

    是的!有足够的 API 功能来做到这一点!

    您要拍摄递归快照吗?

    我非常喜欢 groovy 语法:

    currentDir.eachFileRecurse{ file ->
    ...}
    

    【讨论】:

      【解决方案3】:

      不完全是 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) {
            ...
          }
      }
      

      【讨论】:

        【解决方案4】:

        我会看看apache-commons IO library。我特别使用了 DirectoryWalker,它非常方便递归地检查目录的内容。

        【讨论】:

          【解决方案5】:

          快照基本上是遍历所有目录的递归副本,这似乎是不可避免的。恢复方面,删除目录,将临时目录重命名为原名即可。

          如果这是用于功能测试,那么有一个已知良好的目录并在测试开始时复制它怎么样?这样就没有快照了。当然,这只有在您总是从一组已知文件开始时才有效。

          至于实际的递归副本,Apache 在 Commons-IO 中有一个 method,还有一个 recursive delete

          【讨论】:

            【解决方案6】:

            观察目录(和子目录)的变化,积累它们,然后当你想撤销变化时,只复制变化的文件。

            参见示例:

            http://twit88.com/blog/2007/10/02/develop-a-java-file-watcher/

            http://www2.hawaii.edu/~qzhang/FileSystemWatcher/index.html

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-02-14
              • 1970-01-01
              • 1970-01-01
              • 2014-12-03
              • 1970-01-01
              • 2017-04-20
              相关资源
              最近更新 更多