کلاس StringWriter

کلاس StringWriter یک استریم در حافظه اصلی (RAM) در اختیار ما قرار می‌دهد که می‌توانیم بر روی آن بنویسیم و در نهایت استریم مورد نظر را به رشته متنی تبدیل کنیم ، معمولاً زمانی از این کلاس استفاده می‌شود که ما از تعداد عملیات نوشتن در زمان کامپیال آگاه نیستیم . این کلاس معمولاً به عنوان یک ابزار کمکی در کنار کلاس‌های دیگر استفاده می‌شود. برای استفاده از این کلاس باید از سازنده زیر برای ساختشی جدید از آن استفاده کنیم :

StringWriter ()

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

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

متداول‌ترین کاربرد StringWriter این است که چندین رشته متنی مختلف را در آن بنویسیم و در نهایت یک رشته متنی واحد از روی آن‌ها ایجاد کنیم ، مثال زیر به شرح این موضوع می‌پردازد :

import java.io.*;

public class StringWriterDemo 
{
    public StringWriterDemo() 
    {
        StringWriter stringwriter = new StringWriter();
        try 
        {
            stringwriter.write("Hello \n");
            stringwriter.write("Java \n");
            stringwriter.write("IO\n");

            String result = stringwriter.toString();
            System.out.println(result);

            stringwriter.close();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) 
    {
        new StringWriterDemo();
    }
}

خروجی کد بالا :

Hello
Java
IO

در کد بالا ابتدا یک StringWriter ایجاد می‌کنیم و چند خط در آن می‌نویسیم ، در نهایت stringwriter را به یک رشته متنی (result) تبدیل و چاپ می‌کنیم. قبلاً دیدیم که برای خواندن استریم متنی از فایل باید از کلاس‌های Reader استفاده کنیم ولی در مثال زیر تنها با استفاده از کلاس FileInputStream و به کمک StringWriter محتوای یک فایل متنی را می‌خوانیم و چاپ می‌کنیم.

import java.io.*;

public class StringWriterDemo 
{
    public StringWriterDemo() 
    {

        File myFile = new File("E:/Test.txt");

        FileInputStream fileinputstream = null;
        StringWriter stringwriter = new StringWriter();

        try 
        {
            fileinputstream = new FileInputStream(myFile);

            int c;
            while ((c = fileinputstream.read()) != -1) 
            {
                stringwriter.write(c);
            }

            fileinputstream.close();

            System.out.println(stringwriter.toString());

            stringwriter.close();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) 
    {
        new StringWriterDemo();
    }
}

در کد بالا ابتدا یک شی از کلاس File ایجاد می‌کنیم، برای خواندن هر نوع جریانی از این فایل به یک FileInputStream نیاز خواهیم داشت (شی fileinputstream)، در ادامه در داخل یک حلقه while کاراکتر به کاراکتر از fileinputstream می‌خوانیم و اگر مقدار خوانده شده برابر با -1 نبود با استفاده از متد write آن را در stringwriter می‌نویسیم، در نهایت با فراخوانی متد toString محتوای stringwriter را به رشته متنی تبدیل می‌کنیم و سپس آن را چاپ می‌کنیم.