広告

Java : StandardCopyOption (ファイルコピー) - API使用例

StandardCopyOption (Java SE 22 & JDK 22) の使い方まとめです。
ほとんどのメソッドにサンプルコードがあります。
APIドキュメントのおともにどうぞ。


概要

標準コピー・オプションを定義します。

クラス構成

StandardCopyOption は、Filescopy メソッド、move メソッドに指定して、ファイルのコピー・移動の動作を制御します。

注意

  • 基本は Windows 10 で実行した結果となります。
  • 一部 POSIX 環境でないと確認できないものは、Linux で実行しています。
final var source = Path.of("R:", "java-work", "src.txt");
System.out.println(source); // R:\java-work\src.txt

final var target = Path.of("R:", "java-work", "dst.txt");
System.out.println(target); // R:\java-work\dst.txt

Files.writeString(source, "abc");
Files.writeString(target, "XYZ");

System.out.println(Files.readString(source)); // abc
System.out.println(Files.readString(target)); // XYZ

try {
    System.out.println("-- copy --");
    Files.copy(source, target);
} catch (FileAlreadyExistsException e) {
    System.out.println("FileAlreadyExistsException! : " + e.getMessage());
}

// 結果
// ↓
//-- copy --
//FileAlreadyExistsException! : R:\java-work\dst.txt

System.out.println(Files.readString(source)); // abc
System.out.println(Files.readString(target)); // XYZ

Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);

System.out.println(Files.readString(source)); // abc
System.out.println(Files.readString(target)); // abc

列挙型定数

ATOMIC_MOVE

原子的なファイル・システム操作としてファイルを移動します。

final var source = Path.of("D:", "java-work", "src.txt");
System.out.println(source); // D:\java-work\src.txt

final var target = Path.of("R:", "java-work", "dst.txt");
System.out.println(target); // R:\java-work\dst.txt

Files.writeString(source, "abc");

System.out.println(Files.readString(source)); // abc
System.out.println(Files.exists(target)); // false

try {
    System.out.println("-- move --");
    Files.move(source, target, StandardCopyOption.ATOMIC_MOVE);
} catch (AtomicMoveNotSupportedException e) {
    System.out.println("AtomicMoveNotSupportedException!");
}

// 結果
// ↓
//-- move --
//AtomicMoveNotSupportedException!

System.out.println(Files.readString(source)); // abc
System.out.println(Files.exists(target)); // false

Files.move(source, target);

System.out.println(Files.exists(source)); // false
System.out.println(Files.readString(target)); // abc

COPY_ATTRIBUTES

属性を新しいファイルにコピーします。

// このコード例は Linux で実行しています。
System.out.println(System.getProperty("os.name")); // Linux

final var source = Path.of("src.txt");
System.out.println(source); // src.txt

Files.createFile(source);
Files.setLastModifiedTime(source, FileTime.fromMillis(0));

System.out.println(Files.getLastModifiedTime(source)); // 1970-01-01T00:00:00Z

final var target1 = Path.of("dst1.txt");
System.out.println(target1); // dst1.txt

final var target2 = Path.of("dst2.txt");
System.out.println(target2); // dst2.txt

Files.copy(source, target1);
Files.copy(source, target2, StandardCopyOption.COPY_ATTRIBUTES);

System.out.println(Files.getLastModifiedTime(target1)); // 2024-11-06T06:28:38.017333603Z
System.out.println(Files.getLastModifiedTime(target2)); // 1970-01-01T00:00:00Z

REPLACE_EXISTING

ファイルが存在する場合は既存のファイルを置換します。

final var source = Path.of("R:", "java-work", "src.txt");
System.out.println(source); // R:\java-work\src.txt

final var target = Path.of("R:", "java-work", "dst.txt");
System.out.println(target); // R:\java-work\dst.txt

Files.writeString(source, "abc");
Files.writeString(target, "XYZ");

System.out.println(Files.readString(source)); // abc
System.out.println(Files.readString(target)); // XYZ

try {
    System.out.println("-- copy --");
    Files.copy(source, target);
} catch (FileAlreadyExistsException e) {
    System.out.println("FileAlreadyExistsException! : " + e.getMessage());
}

// 結果
// ↓
//-- copy --
//FileAlreadyExistsException! : R:\java-work\dst.txt

System.out.println(Files.readString(source)); // abc
System.out.println(Files.readString(target)); // XYZ

Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);

System.out.println(Files.readString(source)); // abc
System.out.println(Files.readString(target)); // abc

メソッド

static StandardCopyOption valueOf (String name)

指定された名前を持つこのクラスのenum定数を返します。

final var ret1 = StandardCopyOption.valueOf("REPLACE_EXISTING");
System.out.println(ret1); // REPLACE_EXISTING

final var ret2 = StandardCopyOption.valueOf("COPY_ATTRIBUTES");
System.out.println(ret2); // COPY_ATTRIBUTES

static StandardCopyOption[] values ()

この列挙クラスの定数を含む配列を宣言されている順序で 返します。

for (final var value : StandardCopyOption.values()) {
    System.out.println(value);
}

// 結果
// ↓
//REPLACE_EXISTING
//COPY_ATTRIBUTES
//ATOMIC_MOVE

Enumで宣言されたメソッド

clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf

Java API 使用例 : Enum」をご参照ください。


関連記事

ページの先頭へ