Java FileWriter

Java FileWriterクラス、java.io.FileWriterは、ファイルに文字を書き込むことを可能にします。 この点で、Java FileWriter は FileOutputStream とよく似ているが、FileOutputStream がバイトベースであるのに対し、FileWriter は文字ベースである点が異なる。 つまり、FileWriterはテキストを書くためのものです。 使用する文字エンコード方式によって、1文字が1バイトにも複数バイトにも対応することがあります。 ところで、Java の FileWriter クラスは、Java Writer クラスのサブクラスです。

FileWriter Example

以下に、簡単な Java FileWriter の例を示します。 正しい例外処理については、Java IO Exception Handling を参照してください。

FileWriter には他のコンストラクタもあり、さまざまな方法で書き込み先のファイルを指定することができます。

Overwrite vs. Appending the File

JavaのFileWriterを作成するとき、同じ名前の既存のファイルを上書きするか、既存のファイルに追加するかを決定することができます。

ファイル名という 1 つのパラメータだけを取る FileWriter コンストラクタは、既存のファイルをすべて上書きします:

Writer fileWriter = new FileWriter("c:\data\output.txt");

FileWriter には、2 つのパラメータを取るコンストラクタもあります。 ファイル名とブール値です。 boolean は、既存のファイルを追加するか上書きするかを示します。

Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file

FileWriter Character Encoding

FileWriter は、アプリケーションを実行しているコンピュータのデフォルト文字エンコードを使用して、ファイルへのバイトをエンコードしたいと仮定しています。 これは常に望むものではない可能性があり、変更することはできません!

もし異なる文字エンコーディングのスキームを指定したい場合は、FileWriter を使用しないでください。 代わりにFileOutputStreamOutputStreamWriterを使用します。 OutputStreamWriter は、下位のファイルにバイトを書き込むときに使用する文字エンコード方式を指定します。

write(int)

JavaのFileWriter write(int)メソッドは int の下位16ビットを1文字としてFileWriterが接続している宛先に書き込むのですが、その際に、intの下位16ビットを1文字として書き込みます。 以下は、JavaのFileWriterに1文字を書き込む例です:

FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');

write(char)

JavaのFileWriterには、write(char)メソッドもあり、FileWriterが接続している先に文字の配列を書き込むことが可能です。 write(char)メソッドは、実際にFileWriterに書き込まれた文字数を返します。

FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);

書き込み性能

Java FileWriterに文字の配列を書き込むのは、一度に1文字ずつ書き込むより高速です。 この速度向上は非常に大きく、最大で10倍以上となることもあります。 したがって、可能な限り write(char) メソッドを使用することをお勧めします。

得られる正確な速度向上は、Java コードを実行するコンピュータの基本 OS とハードウェアに依存します。 スピードアップは、メモリ速度、ハードディスク速度、バッファサイズなどの問題に依存します。

Transparent Buffering via BufferedWriter

Java BufferedWriter でラップすることにより、Java FileWriter に書かれたバイトの透過バッファリングを取得することができます。 BufferedWriter に書き込まれたすべてのバイトは、まず BufferedWriter の内部バイト配列にバッファリングされます。 バッファが一杯になると、バッファは一気に下位の FileWriter にフラッシュされます。 以下は、BufferedWriter で Java FileWriter をラップする例です:

int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );

BufferedWriter については BufferedWriter チュートリアルを参照してください。

flush()

Javaの FileWriterflush() メソッドは FileWriter に書き込んだ全データを下位ファイルへフラッシュします。 データは、Java コードが FileWriter に書き込んだとしても、OS メモリのどこかにバッファされている可能性があります。 flush() を呼び出すことにより、バッファリングされたデータがディスクにフラッシュされることを保証することができる。

fileWriter.flush();

Closing a FileWriter

Java FileWriter に文字を書き終えたら、忘れずにそれを閉じなければなりません。 FileWriterを閉じるには、close()メソッドを呼び出します。

fileWriter.close();

また、Java 7で導入されたtry-with-resourcesコンストラクトを使用することもできます。 以下は、try-with-resources 構造体を使用して FileWriter を閉じる方法です:

try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}

Leave a Reply