ストリーム(InputStream
およびOutputStream
)はバイナリデータを転送します。文字列をストリームに書き込む場合は、まず文字列をバイトに変換するか、つまりエンコードする必要があります。String.getBytes(Charset)
メソッドを使用して手動で(推奨どおり)実行できますString.getBytes()
が、移植可能な方法で確実に予測できないJVMのデフォルトのエンコーディングを使用するため、メソッドは使用しないでください。
ただし、文字データをストリームに書き込む通常の方法は、ストリームをWriter
、(多くの場合はPrintWriter
)でラップすることです。これにより、write(String)
(またはprint(String)
)メソッドを呼び出すときに変換が行われます。InputStreamsに対応するラッパーはReaderです。
PrintStream
OutputStream
文字列を自動的にエンコードするメソッドも含まれているという意味で特別な実装です(内部的にライターを使用します)。しかし、それはまだストリームです。ストリームがPrintStream
他のストリーム実装であるかどうかに関係なく、ライターでストリームを安全にラップできます。二重エンコードの危険はありません。
OutputStreamを使用したPrintWriterの例:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}