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
を使用しないでください。 代わりにFileOutputStream
にOutputStreamWriter
を使用します。 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の FileWriter
の flush()
メソッドは 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