カテゴリ: Java 更新日: 2026/01/13
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

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で改行を挿入します。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

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)

7. 改行の入れ方:newLine()を使う理由

7. 改行の入れ方:<code>newLine()</code>を使う理由
7. 改行の入れ方:newLine()を使う理由

改行文字を直接"\n"で書くと、OSが変わったときに見え方が変わることがあります。BufferedWriter#newLine()はプラットフォームに合わせた改行コードを出力するため、移植性の面で安全です。


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

public class BwNewLineExample {
    public static void main(String[] args) {
        Path path = Paths.get("lines.txt");
        try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
            writer.write("1行目");
            writer.newLine(); // OSに合わせた改行
            writer.write("2行目");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
注意:テキスト処理で改行コードに厳密な仕様がある場合(例:外部連携のCRLF固定など)は、newLine()ではなく"\r\n"など明示的な文字列を使いましょう。

まとめ

まとめ
まとめ

今回の記事では、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を選ぶのが基本です。

Java Silver SE17(1Z0-825)の演習量を重視したい人には、 定番の問題集がこちらです。

徹底攻略 Java SE 17 Silver 問題集をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

JavaのBigDecimalクラスsubtractメソッドを徹底解説!初心者向け減算処理ガイド
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
Javaのカプセル化を完全ガイド!初心者でもわかるデータの保護と制御の使い方
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.3
Java&Spring記事人気No3
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.4
Java&Spring記事人気No4
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.5
Java&Spring記事人気No5
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.6
Java&Spring記事人気No6
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門