【Java】ファイルコピーするときファイルが存在する場合に上書きする方法
Javaでファイルコピーするときファイルが存在する場合に上書きするには以下のように実装します。
- 「import static java.nio.file.StandardCopyOption.*;」にてインポートする
- Files.copyメソッドの第三引数に「REPLACE_EXISTING」を指定する
Path コピー元 = Paths.get("Z:/WKJava/ファイル作成/test.txt"); Path コピー先 = Paths.get("Z:/WKJava/ファイル作成/test2.txt"); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); Files.copy(コピー元, コピー先); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); // 実行結果 true true true true
以下、copyメソッドおよび上書きに「REPLACE_EXISTING」の指定に関する説明です。
ファイルをコピーするにはcopyメソッドを使用します。
Files.copy(コピー元, コピー先); // コピー元からコピー先へファイルをコピーします。 // 引数はPathを使用する必要があります。
具体的には、以下のように実装します。
Path コピー元 = Paths.get("Z:/WKJava/ファイル作成/test.txt"); Path コピー先 = Paths.get("Z:/WKJava/ファイル作成/test2.txt"); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); Files.copy(コピー元, コピー先); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); // 実行結果 true false true true
ただし、コピー先にファイルが存在する場合、「java.nio.file.FileAlreadyExistsException」のエラーが発生します
Path コピー元 = Paths.get("Z:/WKJava/ファイル作成/test.txt"); Path コピー先 = Paths.get("Z:/WKJava/ファイル作成/test2.txt"); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); Files.copy(コピー元, コピー先); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); // 実行結果 true true Exception in thread "main" java.nio.file.FileAlreadyExistsException: Z:\WKJava\ファイル作成\test2.txt at java.base/sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:123) at java.base/sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:283) at java.base/java.nio.file.Files.copy(Files.java:1294)
コピー先にファイルが存在することがあり得るのであれば、「REPLACE_EXISTING」の指定することで、上書き保存してエラーとなりません。
※「import static java.nio.file.StandardCopyOption.*;」のインポートが必要です。
Path コピー元 = Paths.get("Z:/WKJava/ファイル作成/test.txt"); Path コピー先 = Paths.get("Z:/WKJava/ファイル作成/test2.txt"); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); Files.copy(コピー元, コピー先); System.out.println(Files.exists(コピー元)); System.out.println(Files.exists(コピー先)); // 実行結果 true true true true
コメントを残す