StackShelf
プログラミング 第12回

Javaのファイル入出力|NIO・Files・try-with-resources

java.nio.fileのPath/Files、テキストファイルの読み書き、BufferedReader、try-with-resources、文字コードの注意点と失敗例を学びます。

2分で読める
JavaファイルIO

結論:ファイルI/OはPath+Files(NIO.2)とtry-with-resourcesで安全に読み書きする

現代のJavaでは java.nio.filePathFiles を使うのが標準です。ストリームは必ずcloseが必要なため、try-with-resourcesで自動解放します。

ファイルの読み込み

import java.nio.file.*;
import java.util.List;

Path path = Path.of("data", "input.txt");
List<String> lines = Files.readAllLines(path);
// または
String content = Files.readString(path);

ファイルの書き込み

Path out = Path.of("output", "result.txt");
Files.createDirectories(out.getParent());
Files.writeString(out, "Hello, File IO!");

BufferedReader(大きなファイル)

try (var reader = Files.newBufferedReader(path)) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}

失敗例:相対パスの勘違い

実行時のカレントディレクトリ基準です。IDEとターミナルでcwdが異なると FileNotFoundException になります。絶対パスや Paths.get(System.getProperty("user.dir")) で確認しましょう。

失敗例:文字コード未指定

Windowsのデフォルト(MS932)とUTF-8の不一致で文字化けします。明示的に StandardCharsets.UTF_8 を指定します。

まとめ

Files APIとtry-with-resourcesがファイルI/Oの基本形です。パス・文字コード・ディレクトリ存在確認は実行環境でハマりやすいポイントです。次回はソケット通信に進みます。

まとめ

Javaのファイル入出力はPath/Filesとtry-with-resourcesで実装します。相対パスの基準ディレクトリとUTF-8指定を忘れるとFileNotFoundExceptionや文字化けが起きます。小さなテキストファイルの読み書きをCLIで試しましょう。

次にやること

input.txt を読み、行数と文字数を数えて stats.txt に書き出すプログラムをFiles APIで作ってください。

よくある質問

File と Path の違いは?

レガシーのjava.io.Fileに対し、PathはNIO.2のモダンAPI。新規コードはPath/Files推奨です。

バイナリファイルは?

Files.readAllBytes / write でバイト列として扱います。

追記モードは?

Files.write(path, bytes, StandardOpenOption.APPEND) 等を使います。

ディレクトリ走査は?

Files.walk や Files.list でStream<Path>として処理できます(後のStream回と連携)。

権限エラーは?

AccessDeniedException。Unix系ではパーミッション、Windowsでは読み取り専用属性を確認します。

次に読むべき記事

同カテゴリ「プログラミング」の記事

学習ルート

体系的に学びたい方はこちらから。

エラー解決コース →

あわせて読みたい