Java

【Java】ファイル書き込み(上書き・追記・文字コード指定)

Javaでファイルの書き込みをする方法

ファイルに書き込む(上書き)

ファイルに書き込むには、書き込みに特化したクラスである「PrintWriter」を使うことで簡単にファイルに書き込むことができます。

次はPrintWriterの使用例です。「println」メソッドを使うことで自動的に改行されます。改行してほくないときは「print」メソッドを使うことで改行せずにファイルに書き込みを行います。

[PrintWriterの使用例]

import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class PrintWriterSample {

    public static void main(String[] args) {

        try (PrintWriter pw = new PrintWriter("C:\\work\\test.txt")) {
            pw.println("あいうえお");
            pw.println("かきくけこ");
            pw.println("さしすせそ");
            pw.flush();

            System.out.println("ファイル書き込み完了");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

[出力されたファイル(test.txt)内容]

あいうえお
かきくけこ
さしすせそ

ファイル操作を行う場合は、処理の最後に必ず「close」メソッドを呼ぶ必要があります。今回の例では、close漏れを防ぐためにも「try-with-resources」(※try -with-resources文は、処理の終わりで各リソースを確実に閉じてくれる)を使用しています。

本記事では、flushを書いていますが、flushは最後の1回だけならcloseで行われるので書かなくてもよいといわれています。

スポンサーリンク

文字コードを指定してファイルに書き込む

文字コードを指定してファイルに書き込む場合は「PrintWriter」のコンストラクタの引数に文字コードを指定します。

次の例では、文字コードに「Shift-JIS」を指定しています。

[文字コードを指定した場合の例]

import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;

public class PrintWriterCharsetSample {

    public static void main(String[] args) {

        try (PrintWriter pw = new PrintWriter("C:\\work\\test.txt", Charset.forName("Shift-JIS"))) {
            pw.println("あいうえお");
            pw.println("かきくけこ");
            pw.println("さしすせそ");
            pw.flush();

            System.out.println("ファイル書き込み完了");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ファイルに追記する

PrintWriterクラスで上書きではなく追記にする場合は、FileWriterクラスを使います。FileWriterクラスのオブジェクト(インスタンス)を生成すると、同時に「ファイルを開く」という処理が行われます。(ファイルが存在しない場合は、新しくファイルが作成される)

そして、ファイルに追記する場合は「FileWriter」のコンストラクタの第2引数に「true」にします。

次の例では、FileWriterクラスでファイルを開き、PrintWriterクラスでファイルの内容に追記します。

[実行前のファイル内容]

あいうえお
かきくけこ
さしすせそ

[ファイル追記の例]

import java.io.IOException;
import java.io.PrintWriter;

public class PrintWriterAppendSample {

    public static void main(String[] args) {

        try {
            FileWriter file = new FileWriter("C:\\work\\test.txt", true);

            try (PrintWriter pw = new PrintWriter(file)) {
                pw.println("追記文字");
                pw.flush();

                System.out.println("ファイルに追記完了");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

[実行後のファイル内容]

あいうえお
かきくけこ
さしすせそ
追記文字

helpful