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();
}
}
Coderanch.comによると、答えを組み合わせると、次のようになります。
FileWriterはIOの文字表現です。つまり、文字の書き込みに使用できることを意味します。内部的にFileWriterは、基盤となるOSのデフォルトの文字セットを使用し、文字をバイトに変換してディスクに書き込みます。
PrintWriter&FileWriter。
類似点
違い
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
これらは両方とも内部で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メソッドのいずれかが呼び出されたときにのみ実行されます。これらのメソッドは、改行文字ではなく、プラットフォーム独自の行区切り記号の概念を使用します。
PrintWriter
には、エラー処理の異なる概念があります。 try/catchブロックを使用する代わりに、checkError()
を呼び出す必要があります。
PrintWriter
はIOException
をスローしません。この目的のためにcheckError()
メソッドを呼び出す必要があります。
Java.io.PrintWriter
Java5 +では、ファイルに書き込む便利なメソッド/コンストラクターが許可されました。 Javadocから;
指定したファイルを使用して、自動行フラッシュなしで新しいPrintWriterを作成します。この便利なコンストラクターは、必要な中間OutputStreamWriterを作成します。これは、Java仮想マシンのこのインスタンスのデフォルトの文字セットを使用して文字をエンコードします。
単にFLUSHに関連する情報とFileOutputStreamに関連するClose menthodを提供するため
flush()---バッファリングされたデータが完全にフラッシュされたディスクに書き込まれ、ストリーム(またはライター)に再び書き込む準備ができていることを確認します。
close()----データをフラッシュし、ファイルハンドル、ソケットなどを閉じます。現在、接続は失われているため、outputStreamには何も書き込むことができません。
Java.io.FileWriterがプラットフォームのデフォルトの文字エンコーディングに依存しているという事実は、それをかなり役に立たないものにします。アプリがデプロイされる環境について何かを想定してはなりません。