کلاس OutputStreamWriter

در آموزش های قبلی با کلاس های انتزاعی Writer و OutputStream آشنا شدیم ، کلاس OutputStreamWriter به عنوان واسط بین این دو کلاس عمل می کند ، با استفاده از این کلاس می توانیم یک جریان کاراکتری را به جریان بایتی تبدیل و ذخیره کنیم.بیشترین کاربرد این کلاس زمانی است که بخواهیم رشته هایی با فرمت هایی همچون UTF-8 ، UTF-16 و … را به صورت بایتی ذخیره کنیم و در عین حال مطمئن باشیم که عمل decode به درستی صورت می گیرد.

برای استفاده از این کلاس باید از یکی از سازنده های زیر برای ساخت شی جدید از آن استفاده کنیم :

OutputStreamWriter (OutputStream out)
OutputStreamWriter (OutputStream out,Charset cs)
OutputStreamWriter (OutputStream out,String charsetName)

متد های پر کاربرد OutputStreamWriter در جدول زیر آمده است:

متد کاربرد
close() جریان ورودی را بسته و منابع استفاده شده را آزاد می کند
flush() داده های بافر شده در حافظه را در استریم خروجی ارسال می کند.
write(char c) کاراکتر c را در استریم خروجی می نویسد.
write(char[] cbuf,int offset,int length) قسمتی از آرایه cbuf را با شروع از اندیس offset به تعداد lenght کاراکتر در استریم خروجی می نویسد.
write(String str,int offset,int length) مشابه متد قبلی است با این تفاوت که به جای آرایه ای از کاراکتر ها از یک String استفاده می کند.

نوشتن در فایل

مثال زیر یک متن آزمایشی را با فرمت UTF-8 در فایل Test.txt ذخیره می کند.

import java.io.*;

public class OutputStreamWriterDemo
{
    public OutputStreamWriterDemo()
    {
        File myFile = new File("C:/Test.txt");
        String sampleData = "Sample Test to Store";
        FileOutputStream fileoutputstream = null;
        OutputStreamWriter outputstreamwriter = null;

        try
        {
            fileoutputstream = new FileOutputStream(myFile);

            outputstreamwriter = new OutputStreamWriter(fileoutputstream, "UTF-8");

            outputstreamwriter.write(sampleData, 0, sampleData.length());

            outputstreamwriter.flush();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                outputstreamwriter.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args)
    {
        new OutputStreamWriterDemo();
    }
}