2009-08-19 5 views
4

フォルダを取得し、そのコンテンツのスナップショットを撮り、いくつかの変更を加えて、Javaプログラムから直前の状態に復元するライブラリがありますか?コマンドラインから)?java:ディレクトリのスナップショットを取ってそれを復元する

編集: 私は非常に大きなフォルダ:80mb、〜7000ファイルで作業しています。 そして、できるだけ早く修正されたファイルだけを復元したいのです。 すべてを元に戻すだけで時間がかかります。

+0

は、あなたがそれらのファイルを変更することができる方法の詳細を与えることができますか?誰かがファイルに触れる可能性はありますか?誰かが1バイトを置き換えても、ファイルの日付を元の値に戻すことは可能でしょうか? – Zed

+0

基本的には、既存のファイルは変更され、新しいファイルが追加され、他のファイルは削除されます。これは、インストール手順の機能テストを行うために使用されます。 – pbreault

答えて

2

スナップショットは、基本的にすべてのディレクトリを経由する再帰的なコピーであり、やむを得ないことです。復元の面では、ディレクトリを削除し、元の名前で一時ディレクトリの名前を変更します。

これは機能テストのためのものですが、テストの開始時に既知の適切なディレクトリを作成してコピーするのはどうですか?そうすれば、スナップショットは取れません。それはもちろん、あなたが常に既知のファイル群から始める場合にのみ機能します。

実際の再帰コピーでは、ApacheはCommons-IOの場合はmethodrecursive deleteの場合は1つです。

2

私はあなたが望むもののために非標準のライブラリを知らないが、ディレクトリの内容を一時ディレクトリにコピーして、それを元に戻してコピーすることができます(一時ディレクトリを削除してください) 。あなたの編集する

Take a look at java.io.File

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

:あなたは、いくつかを追跡するための方法または変更された「フラグ」のファイルを見つける必要があります。おそらく、このような "フラグ"プロパティを持つファイルクラスを拡張しますか?すべてのファイルをメモリに保存できますが、ディレクトリが大きすぎるとメモリが不足する心配があります。

0

ええ!これを行うのに十分なAPI機能があります!

再帰スナップショットを取得しますか?

私はGroovyの構文をたくさん好き:私はapache-commons IO libraryを見てみましょう

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) { 
     ... 
    } 
} 
0

ない正確にJavaの、あまり頭痛を与えます。私は、ディレクトリの内容を再帰的に調べるのに本当に便利なDirectoryWalkerを特に使用しました。

0

...

currentDir.eachFileRecurse{ file -> 
...} 
関連する問題