0

あなたが私のためにいくつかのコードを見てくれることを望んでいました:

public void Copy(Path sourcepath,
        Path targetpath) throws IOException {

    DateFormat dateFormat = new SimpleDateFormat("yyyymmdd");


    File origfile = targetpath.toFile(); // Changes targetpath to file
    String name = origfile.getName(); // Gets the name of the file to be updated
    File file1 = new File(targetpath.toString() + "." + dateFormat.format(Calendar.getInstance().getTime())); //Create a new file instance with the name of the old file + date
    origfile.renameTo(file1); //Rename the original file
    origfile.createNewFile(); //Backup the original file
    Files.delete(targetpath); //Delete the original file
    Files.copy(sourcepath, targetpath);
}

これですべてが機能し、バックアップとコピーが機能します。私の当初の意図は、コピー中のファイルの名前をバックアップ中のファイルに変更することでした。(したがって、文字列 name = origfile.getName();

これは私のコードでした:

File file2 = new File(name);
File srcfile = sourcepath.toFile();
srcfile.renameTo(file2);

さて、それはある程度うまくいきましたが、しばらくすると IOException エラーが発生し始めたので、数時間苦労しました。あきらめて、その名前変更部分を削除しました。

見よ、コピー時にファイルの名前を変更します。

今私の質問: Files.copy はそれを行いますか? ここで何か不思議なことが起こっていますか?それは私がやりたいことを正確に行いますが、私は地獄のように困惑しています。コードが機能するのはなぜですか?

はい、壊れたり機能しなくなったりした場合に備えて知りたいです。私は何かを働かせることができず、その理由がわかりません!

編集:

申し訳ありませんが、投稿時に少し急いでいました。質問をもう少し明確にさせてください。

私の意図は、ソースパスの名前を、バックアップされているファイルの元の名前に変更することでした。名前を変更するコードがありましたが、IOException がスローされたので削除しました。Files.Copy のみを使用したため、sourcepath は元の値を保持し、for ループ内のインスタンスごとにコピーするだけであると想定しました。いいえ、バックアップされる各ファイルの元の名前に完全に変更されます。どこで、どのように?

4

1 に答える 1

0

理解した!ウー!

targetpath をファイルに変換し、バックアップして削除したため、次のことが起こりました。

Files.copy(srcpath,targetpath) を使用したとき、srcpath は targetpath の名前を取りました (ファイルは削除されますが、何も起こらなかったため、元のパスはまだそこにあります)

つまり、基本的には、2 つのパスが私のメソッドに送信され、私のメソッドはバックアップ ファイルを作成し、元のパスの元のファイル (パスではない) を削除しました。(c:\work\testorigfile など)

したがって、 Files.copy(srcpath,targetpath) を使用すると、希望どおりに機能しました。答えは(ある意味で)javadocにあったので、すべてのヒントに感謝します!

于 2013-03-06T09:00:52.417 に答える