39

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

}
4

7 に答える 7

36

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

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

PrintWriter&FileWriter。

類似点

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

違い

  1. FileWriterは、IOに障害が発生した場合に、IOExceptionをスローします。これは、チェックされた例外です。
  2. PrintWriterメソッドはいずれもIOExceptionsをスローしません。代わりに、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

于 2011-04-22T21:03:16.447 に答える
11

これらは両方とも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メソッドのいずれかが呼び出されたときにのみ実行されます。これらのメソッドは、改行文字ではなく、プラットフォーム独自の行区切り文字の概念を使用します。

于 2011-04-22T20:56:24.803 に答える
6

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

于 2011-04-22T20:56:39.513 に答える
3

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

于 2011-04-22T20:58:03.723 に答える
3

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

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

于 2011-04-22T20:58:32.993 に答える
0

FLUSHに関連する詳細情報とFileOutputStreamに関連するClosementhodを提供するためだけに

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

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

于 2015-05-05T12:45:53.807 に答える
0

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

于 2017-07-02T10:22:58.483 に答える