web-dev-qa-db-ja.com

JavaのPrintWriterとFileWriter

PrintWriterとFileWriterは、Javaで、どちらを使用しても同じですか?これまでのところ、結果が同じであるため両方を使用しました。他の上に?

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();
    }

}
33
ough

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

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

PrintWriter&FileWriter。

類似点

  1. どちらもWriterから拡張されています。
  2. どちらも文字表現クラスです。つまり、文字を操作し、デフォルトの文字セットを使用してバイトに変換します。

違い

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

PrintStreamとOutputStreamの違い:上記の説明と同様に、文字をバイトに置き換えます。

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

28
kamaci

これらは両方とも内部でFileOutputStreamを使用します:

public PrintWriter(File file) throws FileNotFoundException {
this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
     false);
}



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

主な違いは、PrintWriterが特別なメソッドを提供することです:

オブジェクトの書式付き表現をテキスト出力ストリームに出力します。このクラスは、PrintStreamにあるすべての印刷メソッドを実装します。プログラムには、エンコードされていないバイトストリームを使用する生バイトを書き込むためのメソッドは含まれていません。

PrintStreamクラスとは異なり、自動フラッシュが有効になっている場合、改行文字が出力されるたびではなく、println、printf、またはformatメソッドのいずれかが呼び出されたときにのみ実行されます。これらのメソッドは、改行文字ではなく、プラットフォーム独自の行区切り記号の概念を使用します。

9

PrintWriterには、エラー処理の異なる概念があります。 try/catchブロックを使用する代わりに、checkError()を呼び出す必要があります。

5
Ted Hopp

PrintWriterIOExceptionをスローしません。この目的のためにcheckError()メソッドを呼び出す必要があります。

3
sergionni

Java.io.PrintWriter Java5 +では、ファイルに書き込む便利なメソッド/コンストラクターが許可されました。 Javadocから;

指定したファイルを使用して、自動行フラッシュなしで新しいPrintWriterを作成します。この便利なコンストラクターは、必要な中間OutputStreamWriterを作成します。これは、Java仮想マシンのこのインスタンスのデフォルトの文字セットを使用して文字をエンコードします。

3
Koekiebox

単にFLUSHに関連する情報とFileOutputStreamに関連するClose menthodを提供するため

flush()---バッファリングされたデータが完全にフラッシュされたディスクに書き込まれ、ストリーム(またはライター)に再び書き込む準備ができていることを確認します。

close()----データをフラッシュし、ファイルハンドル、ソケットなどを閉じます。現在、接続は失われているため、outputStreamには何も書き込むことができません。

0
satender

Java.io.FileWriterがプラットフォームのデフォルトの文字エンコーディングに依存しているという事実は、それをかなり役に立たないものにします。アプリがデプロイされる環境について何かを想定してはなりません。

0
roland