言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. Files.copy() / move() / list() / walk()

Files.copy() / move() / list() / walk()

対応: Java 7(2011)

ファイルのコピー・移動・リネームや、ディレクトリ内のファイル一覧取得を行うメソッドです。Files クラスのメソッドを使うことで、従来の File クラスより直感的にファイル操作が行えます。

構文

// ファイルをコピーします
Files.copy(コピー元Path, コピー先Path);

// 上書きを許可してコピーします
Files.copy(コピー元Path, コピー先Path, StandardCopyOption.REPLACE_EXISTING);

// ファイルを移動(またはリネーム)します
Files.move(移動元Path, 移動先Path);

// ディレクトリ直下のファイル・ディレクトリ一覧を取得します
Stream<Path> entries = Files.list(Path.of("ディレクトリパス"));

// ディレクトリを再帰的に走査します
Stream<Path> all = Files.walk(Path.of("ディレクトリパス"));

メソッド一覧

メソッド概要
Files.copy(src, dst)ファイルをコピーします。コピー先が既に存在する場合は例外がスローされます。
Files.copy(src, dst, options)StandardCopyOption.REPLACE_EXISTING を指定すると上書きを許可します。
Files.move(src, dst)ファイルを移動またはリネームします。同一ファイルシステム内ではアトミックに実行されます。
Files.list(dir)ディレクトリ直下のエントリを Stream<Path> で返します。再帰的には走査しません。
Files.walk(start)指定したディレクトリを再帰的に走査した Stream<Path> を返します。深さを第2引数で制限できます。
Files.find(start, depth, BiPredicate)条件に合うパスだけを再帰的に検索して Stream<Path> で返します。

サンプルコード

sample_FilesCopyMove.java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

class FilesCopyMove {
    public static void main(String[] args) {
        // ファイルをコピーします(上書き許可)
        try {
            Files.copy(
                Path.of("original.txt"),
                Path.of("backup.txt"),
                StandardCopyOption.REPLACE_EXISTING
            );
            System.out.println("コピーが完了しました。");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // ファイルを移動(リネーム)します
        try {
            Files.move(
                Path.of("old_name.txt"),
                Path.of("new_name.txt"),
                StandardCopyOption.REPLACE_EXISTING
            );
            System.out.println("移動が完了しました。");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // ディレクトリ直下のファイル一覧を取得します
        try (var stream = Files.list(Path.of("."))) {
            stream.forEach(p -> System.out.println(p.getFileName()));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // ディレクトリを再帰的に走査して .txt ファイルだけ出力します
        try (var stream = Files.walk(Path.of("."))) {
            stream
                .filter(p -> p.toString().endsWith(".txt"))
                .forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
FilesCopyMove.java
javac FilesCopyMove.java
java FilesCopyMove
コピーが完了しました。
移動が完了しました。
FilesCopyMove.java
backup.txt
new_name.txt
./new_name.txt

※ ファイルが存在しない場合はエラーが出力されます。Files.list() と Files.walk() の出力はディレクトリの内容によって変わります。

概要

『Files.list()』と『Files.walk()』は Stream を返すため、try-with-resources で使用してください。ストリームを閉じないとファイルハンドルがリークします。

『Files.walk()』でディレクトリを中身ごと削除するには、深い階層から順に削除する必要があります。sorted(Comparator.reverseOrder()) を組み合わせると、サブディレクトリを先に削除できます(例: walk(dir).sorted(Comparator.reverseOrder()).forEach(Files::delete))。

ファイルの存在確認・作成については『Files.exists() / isFile() / isDirectory()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。