0

私はファイルをコピーするための小さなプログラムを書いています。プログラムは、コピーするファイルがすでにコピー先の場所にコピーされているかどうかを確認します。

同じファイルが存在するかどうかを確認するために、次の2つのことを比較しています。

  1. (ソースファイルと宛先ファイルの)ファイルのサイズ。
  2. 最終変更されたタイムスタンプ。

しかし、Javaでこれを行うには次の問題があります。

  1. ファイルがJavaIO(入力/出力ストリーム)を使用してコピーされる場合、File.lengthは同じ番号を返しません(1の違いがあります)。
  2. Java IOを使用してファイルをコピーする場合、コピーされたファイルの最後に変更されたタイムスタンプは、元の日付/時刻ではなく現在の日付/時刻になります。

提案してください。

4

4 に答える 4

3
  1. サイズが異なる場合は、コードにバグがあります。テキストファイルを扱っていて、改行文字を正しく処理していないと思われます。ファイルをコピーする場合は、バイトを使用する必要があります。明らかに、これは仮定にすぎません。コードの一部を投稿していません。
  2. 正解です。新しいファイルは、元のファイルのコピーにすぎません。最終変更日は、このファイルが最後に変更された日付、つまり、書き込みが終了した日付です。変更するには File.setLastModifed()方法を使用します。
于 2012-05-23T19:04:40.117 に答える
2

通常、元のファイルのMD5合計を計算し、それをターゲットファイルのMD5合計と比較します。それらが等しい場合は、問題ありません。

他の簡単な方法は、ファイルをコピーし、コピー中にサフィックスを追加し、コピープロセスが終了したら、ファイル名のサフィックスを削除して、ファイルの存在のみを確認することです。

お役に立てれば!

于 2012-05-23T19:04:14.550 に答える
1

属性もコピーする必要があります。Filesクラスには属性のコピーオプションがあることを知っています:http://docs.oracle.com/javase/tutorial/essential/io/copy.html

于 2012-05-23T19:05:12.317 に答える
0

あるファイルを別のファイルにコピーするには、任意のクラスを使用できますが、ファイルがすでにコピーされているかどうかを確認するためにタイムスタンプを使用する必要がある理由がわかりません。

宛先ファイルとソースファイルの内容を確認できます。一致する場合はファイルがコピーされ、一致しない場合はファイルはコピーされません。

別のアプローチは、ファイルクラスのlastModifiedメソッドを使用することです...最初のアプローチはより良いオプションのようです

于 2012-05-23T19:05:35.033 に答える