0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java Gold 例題 nio copy

Last updated at Posted at 2024-08-14
public class FileCopyTest {
	public static void main(String[] args) {
		
        Path sp = Paths.get("food.jpg");
		Path dp = Paths.get("food_copy.jpg");
		
		try {
			if(Files.exists(dp)) {
				System.out.println("file already exists");
			} else {
				Files.copy(sp, dp, StandardCopyOption.REPLACE_EXISTING);
				System.out.println("copy sucucess");
			};
		} catch(IOException e) {
			System.out.println("IOException");
		}
      }
  }

food_copy.jpgは存在しない。
このコードを2回実行した時に表示される出力結果はどれでしょうか。

A

copy sucucess
copy sucucess

B

copy sucucess
file already exists

C

copy sucucess
IOException

D

IOException
IOException

E

try-with-resourceなどでFileをcloseしていないためコンパイルエラー

F

try-with-resourceなどでFileをcloseしていないため実行時エラー

解答 B

1回目
if(Files.exists(dp))では「food_copy.jpg」が存在するか確認します。
food_copy.jpgは存在しない。とあるので、falseになります。

Files.copy(sp, dp, StandardCopyOption.REPLACE_EXISTING);
ではnioのFilesを使ってjpgファイルをコピーしています。
オプションのStandardCopyOption.REPLACE_EXISTINGはコピーが存在しても上書きします。
コピーが作成された後、「copy sucucess」が出力されます。

2回目
if(Files.exists(dp))では「food_copy.jpg」が存在するか確認します。
1回目の実行でコピーファイルが既に存在するので、trueになります。
「file already exists」が出力されます。

補足
try-with-resources

try-with-resourcesは、AutoCloseableインターフェースを実装するリソース
(例: InputStream, OutputStream, BufferedReader, BufferedWriterなど)を使用する場合に便利です。
リソースが自動的にクローズされるため、リソースリークを防ぐのに役立ちます。

Files.copy()メソッドは、ファイルシステムの操作を行うだけでリソースを管理するわけではないためtryブロック内で例外処理を行うだけで問題ありません。

仮に本コードのif文がなく以下の場合

try {
    Files.copy(sp, dp, StandardCopyOption.REPLACE_EXISTING);
    System.out.println("copy sucucess");
} catch(IOException e) {
    System.out.println("IOException");
}

コピーは上書きされるため、1回目、2回目ともに「copy sucucess」が出力されます。

Files.copy(sp, dp);

ちなみにStandardCopyOption.REPLACE_EXISTINGオプションを指定せずに実行すると
1回目はコピーが成功します。
2回目はFileAlreadyExistsExceptionがスローされます。
「IOException」が出力されます。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?