1. ホーム
  2. java

[解決済み] JavaにおけるPrintWriterとFileWriterの比較

2022-01-30 11:34:55

質問事項

JavaでのPrintWriterとFileWriterは同じで、どちらを使ってもいいのでしょうか?今までは、結果が同じなので両方使っていました。何か特別なケースで、どちらかを優先する意味があるのでしょうか?

public static void main(String[] args) {

    File fpw = new File("printwriter.txt");
    File fwp = new File("filewriter.txt");
    try {
        PrintWriter pw = new PrintWriter(fpw);
        FileWriter fw = new FileWriter(fwp);
        pw.write("printwriter text\r\n");
        fw.write("filewriter text\r\n");
        pw.close();
        fw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

解決方法は?

coderanch.comによると、答えを組み合わせると、次のようになります。

FileWriterは、IOの文字表現です。つまり、文字を書き込むのに使えるということです。内部的にはFileWriterは、基盤となるOSのデフォルトの文字セットを使用し、文字をバイトに変換してディスクに書き込むことになります。

PrintWriter & FileWriterです。

類似点

  1. どちらもWriterを継承しています。
  2. どちらも文字表現クラスです。つまり、文字を処理し、デフォルトの文字セットでバイトに変換します。

相違点

  1. FileWriterはIOに失敗した場合、IOExceptionを投げるが、これはチェックされた例外である。
  2. PrintWriter のメソッドはいずれも IOExceptions をスローしませんが、代わりに checkError() で取得できる boolean フラグをセットします。
  3. PrintWriter には、特定のメソッドが呼び出されたときに自動フラッシュを有効にするために使用できるオプションのコンストラクタがあります。FileWriter にはそのようなオプションはありません。
  4. FileWriterにはオプションのコンストラクタがあり、ファイルへの書き込み時に"write()"メソッドが呼ばれると、既存のファイルに追記することができます。

PrintStreamとOutputStreamの違い。上の説明と同様で、characterをbyteに置き換えるだけです。

PrintWriter には次のメソッドがあります。

close()
flush()
format()
printf()
print()
println()
write()

で、コンストラクタは:

File (as of Java 5)
String (as of Java 5)
OutputStream
Writer

一方、FileWriterは以下のメソッドを持っています。

close()
flush()
write()

で、コンストラクタは:

File
String 

リンク http://www.coderanch.com/t/418148/java-programmer-SCJP/certification/Information-PrintWriter-FileWriter