簡體   English   中英

在java中:獲取目錄的快照並將其還原

[英]In java: Take snapshot of a directory and restore it

是否有一個庫可以獲取文件夾,獲取其內容的快照,進行一些修改,然后直接從java程序(即不是從命令行)將其恢復到以前的狀態?

編輯 :基本上,我正在處理一個非常大的文件夾:80mb,~7000個文件。 我想只恢復盡快修改的文件。 只復制一切看起來很費時間。

我不知道你想要什么的非標准庫,但你可以嘗試將目錄的內容復制到一個臨時目錄中,並在完成后將其復制回來(並刪除臨時目錄)。

看看java.io.File

這是另一個專門用於復制文件/文件夾的庫。

要進行編輯:您必須找到一些方法來跟蹤或“標記”已修改的文件。 也許用這樣的“flag”屬性擴展文件類? 您可以將所有文件保存在內存中,但如果這些目錄變得太大,您將不得不擔心內存不足。

快照基本上是所有目錄的遞歸副本,這似乎是不可避免的。 在恢復方面,只需刪除目錄並使用原始名稱重命名臨時目錄。

如果這是用於功能測試,那么如何擁有一個已知的好目錄並在測試開始時復制它? 這樣就沒有快照了。 當然,這只適用於您始終使用一組已知文件的情況。

至於實際的遞歸副本,Apache在Commons-IO中有一個方法 ,以及一個進行遞歸刪除的方法

是啊! 有足夠的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庫 我特別使用DirectoryWalker,它非常方便地遞歸檢查目錄的內容。

查看目錄(和子目錄)以進行更改,累積它們,然后在要反轉更改時,僅復制更改的文件。

參見例如:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM