Java

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

2021年5月15日

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();

        } catch (FileNotFoundException e) {
            // ここにエラー処理
        }
    }
}

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

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

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

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

スポンサーリンク

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

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

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

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

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

public class PrintWriterCharsetSample {

    public static void main(String[] args) {

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

        } catch (IOException e) {
            // ここにエラー処理
        }
    }
}

また、以下のように実装することもできます。

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

package course26;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class PrintWriterCharsetSample {

    public static void main(String[] args) {

        File file = new File("C:\\work\\test.txt");

        try(PrintWriter pw = new PrintWriter(new BufferedWriter
                    (new OutputStreamWriter(new FileOutputStream(file),"UTF-8")))) {

            pw.println("あいうえお");
            pw.println("かきくけこ");
            pw.println("さしすせそ");
            pw.flush();

        } catch (IOException e) {
            // ここにエラー処理
        }
    }
}

ファイルに追記する

ファイルに追記する場合は、FileWriterクラスの引数に「true」を指定すれば、内容を追記して書き込めます。

FileWriter fileWriter= new FileWriter("ファイル名", true);

もしくは

File file = new File("ファイル名");

FileWriter fileWriter= new FileWriter(file, true);

下記は、FileWriterクラスを使用した実装例です。

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

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

[ファイルに追記する場合の実装例]

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class PrintWriterAppendSample {

    public static void main(String[] args) {

        File file = new File("C:\\work\\test.txt");

        if (file.exists()) {
            try(FileWriter fw = new FileWriter(file, true)) {
                // 追記する文字
                fw.write("文字を追加");
                // 改行コード
                fw.write(System.getProperty("line.separator"));

            } catch (IOException e) {
                // ここにエラー処理
            }
        }
    }
}

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

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

また、以下のように実装することUTF-8もできます。

[ファイルに追記する場合の実装例2]

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

public class PrintWriterAppendSample {

    public static void main(String[] args) {

        File file = new File("C:\\work\\test.txt");

        if (file.exists()) {
            try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true)))) {
                // 追記する文字
                pw.println("文字を追加");
                pw.flush();

            } catch (IOException e) {
                // ここにエラー処理
            }
        }
    }
}

helpful