フォルダを取得し、そのコンテンツのスナップショットを撮り、いくつかの変更を加えて、Javaプログラムから直前の状態に復元するライブラリがありますか?コマンドラインから)?java:ディレクトリのスナップショットを取ってそれを復元する
編集: 私は非常に大きなフォルダ:80mb、〜7000ファイルで作業しています。 そして、できるだけ早く修正されたファイルだけを復元したいのです。 すべてを元に戻すだけで時間がかかります。
フォルダを取得し、そのコンテンツのスナップショットを撮り、いくつかの変更を加えて、Javaプログラムから直前の状態に復元するライブラリがありますか?コマンドラインから)?java:ディレクトリのスナップショットを取ってそれを復元する
編集: 私は非常に大きなフォルダ:80mb、〜7000ファイルで作業しています。 そして、できるだけ早く修正されたファイルだけを復元したいのです。 すべてを元に戻すだけで時間がかかります。
スナップショットは、基本的にすべてのディレクトリを経由する再帰的なコピーであり、やむを得ないことです。復元の面では、ディレクトリを削除し、元の名前で一時ディレクトリの名前を変更します。
これは機能テストのためのものですが、テストの開始時に既知の適切なディレクトリを作成してコピーするのはどうですか?そうすれば、スナップショットは取れません。それはもちろん、あなたが常に既知のファイル群から始める場合にのみ機能します。
実際の再帰コピーでは、ApacheはCommons-IOの場合はmethod、recursive deleteの場合は1つです。
私はあなたが望むもののために非標準のライブラリを知らないが、ディレクトリの内容を一時ディレクトリにコピーして、それを元に戻してコピーすることができます(一時ディレクトリを削除してください) 。あなたの編集する
And here is another library specifically for copying files/folders.
:あなたは、いくつかを追跡するための方法または変更された「フラグ」のファイルを見つける必要があります。おそらく、このような "フラグ"プロパティを持つファイルクラスを拡張しますか?すべてのファイルをメモリに保存できますが、ディレクトリが大きすぎるとメモリが不足する心配があります。
ええ!これを行うのに十分な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) {
...
}
}
ない正確にJavaの、あまり頭痛を与えます。私は、ディレクトリの内容を再帰的に調べるのに本当に便利なDirectoryWalkerを特に使用しました。
...
currentDir.eachFileRecurse{ file ->
...}
変更をディレクトリ(およびサブディレクトリ)で監視して累積し、変更を元に戻す場合は、変更されたファイルのみをコピーします。
は、例えば参照:
http://twit88.com/blog/2007/10/02/develop-a-java-file-watcher/
は、あなたがそれらのファイルを変更することができる方法の詳細を与えることができますか?誰かがファイルに触れる可能性はありますか?誰かが1バイトを置き換えても、ファイルの日付を元の値に戻すことは可能でしょうか? – Zed
基本的には、既存のファイルは変更され、新しいファイルが追加され、他のファイルは削除されます。これは、インストール手順の機能テストを行うために使用されます。 – pbreault