Akışlar ( InputStreamve OutputStream) ikili verileri aktarır . Bir akışa bir dize yazmak istiyorsanız, önce onu bayta dönüştürmeniz veya başka bir deyişle onu kodlamanız gerekir. Bunu String.getBytes(Charset)yöntemi kullanarak manuel olarak (önerdiğiniz gibi) yapabilirsiniz , ancak yöntemden kaçınmalısınız String.getBytes(), çünkü bu, taşınabilir bir şekilde güvenilir bir şekilde tahmin edilemeyen JVM'nin varsayılan kodlamasını kullanır.
Bir akışa karakter verileri yazmanın genel yolu, akışı, (veya ) yöntemini çağırdığınızda dönüştürme işlemini sizin için yapan bir Writer, (genellikle a ) içine sarmaktır. InputStreams için karşılık gelen sarıcı bir Reader'dır .PrintWriterwrite(String)print(String)
PrintStreamOutputStreamdizeleri otomatik olarak kodlayan yöntemler içerdiği için özel bir uygulamadır (dahili olarak bir yazar kullanır). Ama yine de bir dere. Bir PrintStreamakış uygulaması ya da başka bir akış uygulaması olursa olsun akışınızı bir yazarla güvenle sarabilirsiniz . Çift kodlama tehlikesi yoktur.
OutputStream özellikli PrintWriter örneği:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}