Java FileWriter

Java FileWriterクラスjava.io.FileWriterを使用すると、ファイルに文字を書き込むことができます。 その点で、Java FileWriterはFileOutputStreamとよく似ていますが、FileOutputStreamはバイトベースですが、FileWriterは文字ベースです。 つまり、FileWriterはテキストを書くことを意図しています。 使用されている文字エンコード方式に応じて、一つの文字は一つ以上のバイトに対応することができます。 JavaFileWriterクラスは、Java Writerクラスのサブクラスです。

FileWriterの例

ここでは、単純なJavaFileWriterの例です:

Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();

メモ: 明確にするために、適切な例外処理はここでスキップされています。 正しい例外処理の詳細については、”Java IO例外処理”を参照してください。

FileWriterには他のコンストラクタもあり、書き込み先のファイルをさまざまな方法で指定できます。 より詳細な情報については、公式のJavaDocを参照してください。

上書きとファイルの追加

JavaFileWriterを作成するときに、同じ名前の既存のファイルを上書きするか、既存のファイルに追加するかを決定できます。 それを決定するには、使用するFileWriterコンストラクタを選択します。

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

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

FileWriter ファイル名とブール値:あまりにも2つのパラメータを取るコンストラクタを持っています。 ブール値は、既存のファイルを追加するか上書きするかを示します。 以下は、それを示す2つのJavaFileWriterの例です:

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

FileWriter文字エンコーディング

FileWriterは、アプリケーションが実行されているコンピュータの既定の文字エンコーディングを使用して、バイトをファイルにエンコードすることを前提としています。 これは常にあなたが望むものではないかもしれません、そしてあなたはそれを変えることはできません!

別の文字エンコード方式を指定する場合は、FileWriterを使用しないでください。 代わりにOutputStreamWriterFileOutputStreamに使用します。 OutputStreamWriterを使用すると、基になるファイルにバイトを書き込むときに使用する文字エンコード方式を指定できます。JavaFileWriterwrite(int)メソッドは、intの下位16ビットをFileWriterが接続されている宛先に単一の文字として書き込みます。 JavaFileWriterに単一の文字を書き込む例を次に示します:

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

write(char)

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

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

書き込みパフォーマンス

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

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

Bufferedwriterを介した透過的なバッファリング

JavaFileWriterに書き込まれたバイトの透過的なバッファリングをJava BufferedWriterでラップすることで取得できます。 BufferedWriterに書き込まれたすべてのバイトは、最初にBufferedWriterの内部バイト配列内にバッファされます。 バッファがいっぱいになると、バッファは一度に基になるFileWriterにフラッシュされます。 ここでは、JavaFileWriterをaでラップする例を示しますBufferedWriter:

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

あなたは私のBufferedWriterチュートリアルでBufferedWriterについての詳細を読むことができます。

flush()

JavaFileWriterflush()メソッドは、FileWriterに書き込まれたすべてのデータを基になるファイルにフラッシュします。 データは、JavaコードがFileWriterに書き込んだ場合でも、どこかのOSメモリにバッファされる可能性があります。 flush()を呼び出すと、バッファされたデータがディスクにフラッシュ(書き込まれる)ことを保証できます。 JavaFileWriterに書き込まれたデータをflush()メソッドを呼び出してフラッシュする例を次に示します:

fileWriter.flush();

FileWriter

を閉じるjavaFileWriterへの文字の書き込みが終了したら、それを閉じることを忘れないでください。 FileWriterを閉じるには、close()メソッドを呼び出します。 JavaFileWriterを閉じる方法は次のとおりです:

fileWriter.close();

また、java7で導入された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");}

コメントを残す

メールアドレスが公開されることはありません。