1. 概要

このチュートリアルでは、 java.ioパッケージに含まれるFileWriterクラスを学習して理解します。

2. FileWriter

FileWriterは、文字ファイルを書き込むための専用の OutputStreamWriterです。 新しい操作は公開されませんが、OutputStreamWriterおよびWriterクラスから継承された操作で機能します。

Java 11までは、FileWriterはデフォルトの文字エンコードとデフォルトのバイトバッファサイズで動作していました。 ただし、 Java 11では、Charsetを受け入れる4つの新しいコンストラクターが導入されたため、ユーザー指定のCharsetが可能になりました。 残念ながら、バイトバッファサイズはまだ変更できず、8192に設定されています。

2.1. FileWriterのインスタンス化

Java 11より前のJavaバージョンを使用している場合、FileWriterクラスには5つのコンストラクターがあります。

さまざまなコンストラクターを見てみましょう。

public FileWriter(String fileName) throws IOException {
    super(new FileOutputStream(fileName));
}

public FileWriter(String fileName, boolean append) throws IOException {
    super(new FileOutputStream(fileName, append));
}

public FileWriter(File file) throws IOException {
    super(new FileOutputStream(file));
}

public FileWriter(File file, boolean append) throws IOException {
    super(new FileOutputStream(file, append));
}

public FileWriter(FileDescriptor fd) {
    super(new FileOutputStream(fd));
}

Java 11では、次の4つの追加コンストラクターが導入されました。

public FileWriter(String fileName, Charset charset) throws IOException {
    super(new FileOutputStream(fileName), charset);
}

public FileWriter(String fileName, Charset charset, boolean append) throws IOException {
    super(new FileOutputStream(fileName, append), charset);
}

public FileWriter(File file, Charset charset) throws IOException {
    super(new FileOutputStream(file), charset);
}

public FileWriter(File file, Charset charset, boolean append) throws IOException {
    super(new FileOutputStream(file, append), charset);
}

2.2. 文字列をファイルに書き込む

次に、 FileWriter コンストラクターの1つを使用して、 FileWriter のインスタンスを作成し、ファイルに書き込みます。

try (FileWriter fileWriter = new FileWriter("src/test/resources/FileWriterTest.txt")) {
    fileWriter.write("Hello Folks!");
}

ファイル名を受け入れるFileWriterの単一引数コンストラクターを使用しました。  次に、 Writerクラスから継承されたwrite(String str)操作を使用します。 FileWriterはAutoCloseableであるため、try-with-resourcesを使用して、FileWriterを明示的に閉じる必要がないようにしました

上記のコードを実行すると、Stringが指定されたファイルに書き込まれます。

Hello Folks!

FileWriterは、FileWriterTest.txtファイルが使用可能か作成されるかを保証しません。基盤となるプラットフォームによって異なります。

また、特定のプラットフォームでは、単一のFileWriterインスタンスのみがファイルを開くことができる場合があることに注意する必要があります。 その場合、関連するファイルがすでに開いていると、FileWriterクラスの他のコンストラクターは失敗します。

2.3. 文字列をファイルに追加する

多くの場合、ファイルの既存のコンテンツにデータを追加する必要があります。 次に、追加をサポートするFileWriterの例を見てみましょう。

try (FileWriter fileWriter = new FileWriter("src/test/resources/FileWriterTest.txt", true)) {
    fileWriter.write("Hello Folks Again!");
}

ご覧のとおり、ファイル名とbooleanフラグappendを受け入れる2つの引数のコンストラクターを使用しました。 フラグappendをtrueとして渡すと、ファイルの既存のコンテンツにテキストを追加できるFileWriterが作成されます

コードを実行すると、指定したファイルの既存のコンテンツにStringが追加されます。

Hello Folks!Hello Folks Again!

3. 結論

この記事では、コンビニエンスクラス FileWriter と、FileWriterを作成するいくつかの方法について学習しました。 次に、それを使用してデータをファイルに書き込みました。

いつものように、チュートリアルの完全なソースコードは、GitHubから入手できます。