カテゴリ: Java 更新日: 2026/01/08

JavaのBufferedWriterクラスを完全解説!初心者でもわかるファイル書き込み

BufferedWriterクラス
BufferedWriterクラス

先生と生徒の会話形式で理解しよう

生徒

「Javaでファイルにデータを書き込むには、どのクラスを使えばいいんですか?」

先生

「良い質問ですね。ファイル書き込みには、BufferedWriterクラスがよく使われます。効率よく文字列を書き込むことができるんですよ。」

生徒

「効率的というのはどういうことですか?」

先生

「通常の書き込みよりもバッファリング機能を使って高速化できるんです。詳しく見てみましょう!」

1. BufferedWriterクラスとは?

1. BufferedWriterクラスとは?
1. BufferedWriterクラスとは?

JavaのBufferedWriterクラスは、文字列を効率的にファイルに書き込むためのクラスです。このクラスはjava.ioパッケージに属しており、書き込み操作をバッファリングすることで速度を向上させます。

例えば、FileWriterだけを使ってデータを書き込むと、毎回ディスクへのアクセスが発生しますが、BufferedWriterを使えば、一時的にメモリ上にデータを蓄えてからまとめて書き込むので効率的です。

2. BufferedWriterの基本的な使い方

2. BufferedWriterの基本的な使い方
2. BufferedWriterの基本的な使い方

次に、基本的な使い方をサンプルコードで確認しましょう。


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterExample {
    public static void main(String[] args) {
        String filePath = "example.txt";
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write("こんにちは、BufferedWriter!");
            writer.newLine();
            writer.write("Javaのファイル書き込みは簡単です。");
            System.out.println("ファイルに書き込みました。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上記のコードでは、try-with-resourcesを使用して、BufferedWriterのインスタンスを作成しています。writer.writeで文字列を書き込み、writer.newLineで改行を挿入します。

3. BufferedWriterを使う際の注意点

3. BufferedWriterを使う際の注意点
3. BufferedWriterを使う際の注意点

以下は、BufferedWriterを使用する際の注意点です。

  • 書き込みが完了した後はcloseメソッド、またはtry-with-resourcesを使ってリソースを確実に解放する。
  • バッファサイズを変更する場合、コンストラクタでサイズを指定できます。
  • 例外処理を必ず実装して、エラー発生時にも適切な対応を行う。

4. BufferedWriterを使った応用例

4. BufferedWriterを使った応用例
4. BufferedWriterを使った応用例

複数行の文字列をリストから書き込む例を見てみましょう。


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class BufferedWriterAdvancedExample {
    public static void main(String[] args) {
        List<String> lines = List.of("1行目の内容", "2行目の内容", "3行目の内容");
        String filePath = "multi_lines.txt";
        
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            for (String line : lines) {
                writer.write(line);
                writer.newLine();
            }
            System.out.println("複数行を書き込みました。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

このコードでは、リストの各要素をループで書き込んでいます。BufferedWriterは複数行の書き込みでも効率的に動作します。

5. 文字コード(エンコーディング)を指定して安全に書き込む

5. 文字コード(エンコーディング)を指定して安全に書き込む
5. 文字コード(エンコーディング)を指定して安全に書き込む

FileWriterはOS既定の文字コードを使うため、環境によっては文字化けが起きます。実務ではUTF-8を明示して再現性を高めるのが基本です。Files.newBufferedWriterならBufferedWriterを直接取得でき、文字コード指定も簡単です。


import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.io.BufferedWriter;
import java.io.IOException;

public class BwEncodingExample {
    public static void main(String[] args) {
        Path path = Paths.get("utf8_example.txt");
        try (BufferedWriter writer =
                Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
            writer.write("UTF-8で安全に書き込む");
            writer.newLine();
            writer.write("環境が変わっても文字化けしにくい");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ポイント:既存コードでFileWriterを使っている場合は、new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8))のようにラップしても同様の効果があります。

6. 追記(append)と上書きの違いを理解しよう

6. 追記(append)と上書きの違いを理解しよう
6. 追記(append)と上書きの違いを理解しよう

既存ファイルに行を追加したい場合は「追記モード」を使います。デフォルトは上書きなので注意しましょう。


import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.io.BufferedWriter;
import java.io.IOException;
import static java.nio.file.StandardOpenOption.*;

public class BwAppendExample {
    public static void main(String[] args) {
        Path path = Paths.get("logs/app.log");
        try (BufferedWriter writer = Files.newBufferedWriter(
                path,
                StandardCharsets.UTF_8,
                CREATE,  // なければ作成
                APPEND   // あれば末尾に追記
        )) {
            writer.write("アプリケーション起動");
            writer.newLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 上書き:既存の中身を消して書き直す。例:Files.newBufferedWriter(path, UTF_8, CREATE, TRUNCATE_EXISTING)
  • 追記:末尾に追加。例:APPENDオプション、またはnew FileWriter(file, true)

まとめ

まとめ
まとめ

今回の記事では、BufferedWriterクラスを用いたファイル書き込みの基本から応用までを解説しました。ポイントは、以下の通りです:

  • BufferedWriterは、バッファリング機能を使い効率的にファイルに文字列を書き込むクラス。
  • 基本的な使い方として、writeメソッドで文字列を記述し、newLineで改行を追加できる。
  • エラー処理にはtry-catch構文を使用し、try-with-resourcesでリソースを自動的に解放する。
  • バッファサイズの調整やリストからの複数行書き込みなどの応用が可能。

BufferedWriterは、初心者からプロフェッショナルまで幅広い用途で利用されており、特に効率的なファイル操作が求められる場面で力を発揮します。最後に、もう一つ応用例として、カスタムバッファサイズを指定したコードを紹介します。


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class CustomBufferSizeExample {
    public static void main(String[] args) {
        String filePath = "custom_buffer.txt";
        int bufferSize = 8192; // 8KBのバッファサイズを指定
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath), bufferSize)) {
            writer.write("カスタムバッファサイズを使用して効率的に書き込みます。");
            System.out.println("ファイルに書き込みました。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

このコードでは、BufferedWriterのコンストラクタにバッファサイズを指定しています。このように、書き込みのニーズに合わせた調整が可能です。

先生と生徒の振り返り会話

生徒

「BufferedWriterクラスを使えば、ファイルの書き込みが高速化できるってわかりました!」

先生

「そうですね。特に大量のデータを書き込むときや、改行を挿入する必要がある場合に便利です。」

生徒

「エラー処理も重要なんですね。try-with-resourcesを使えば、自動でリソースを解放してくれるのが便利です!」

先生

「その通りです。また、応用としてバッファサイズを変更する方法や、リストのデータを一括で書き込む方法も覚えておきましょう。」

生徒

「今日はたくさん学べました!次は他のファイル操作のクラスも学びたいです。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JavaのBufferedWriterとは何ですか?Javaのファイル書き込みでどんな役割があり、java.ioパッケージのどこに属しているのか、初心者にもわかりやすく知りたいです。

BufferedWriterはJavaのjava.ioパッケージにある文字列用のファイル書き込みクラスで、文字データを一度メモリのバッファにためてからディスクへまとめて出力します。バッファリングによりディスクアクセスの回数を減らし、ファイル書き込みの速度と効率を高めます。記事内でも、文字列を書いて改行を入れる基本操作を通じて、初心者が安全に使えることを解説しています。

BufferedWriterとFileWriterの違いは何ですか?Javaのファイル書き込みでどちらを選べばよいのか、パフォーマンスの観点で知りたいです。

FileWriterは文字を直接ファイルに書き込みますが、BufferedWriterは内部バッファにためてからまとめて書き込むため、ディスクI/Oの回数を抑えられます。記事では、FileWriterだけだと毎回ディスクアクセスが発生しやすい一方、BufferedWriterなら効率的に高速化できると説明しています。大量の文字列や複数行の出力にはBufferedWriterを選ぶのが基本です。
カテゴリの一覧へ
新着記事
Springの@Transactional徹底解説!トランザクションの伝播・分離レベル・タイムアウトの基本
JavaのHashMapクラスgetメソッドの使い方を完全ガイド!初心者でもわかるjava.util入門
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法