あなたが私のためにいくつかのコードを見てくれることを望んでいました:
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 ループ内のインスタンスごとにコピーするだけであると想定しました。いいえ、バックアップされる各ファイルの元の名前に完全に変更されます。どこで、どのように?