JavaA2Z

KAB-studio > プログラミング > JavaA2Z > FilterWriterとは

FilterWriter

日本語 濾過膜書記
英語 filter writer
ふりがな ふぃるたーらいたー
フリガナ フィルターライター

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.FilterWriter。
ストリームクラスWriterクラスサブクラスであり、文字出力ストリームクラスである。
文字出力ストリームクラスの中では「出力用」に位置する。
対になる入力側のクラスFilterReaderクラスである。
 
文字出力ストリームの「中継ぎ」クラススーパークラス
「出力用」→「中継ぎ」→「出力先」という連携の中で、「出力用」に渡した文字データを書き換えたりといった「中間位置での立ち回り」をクラスの、スーパークラスとなるクラスである。
そういったスーパークラスとしての役目だけ持つため、このクラスのみを単独で使用することはない。このクラスサブクラスを使用するか、もしくはサブクラスを作成して使用する。
ただし、J2SEにはFilterWriterクラスサブクラスは存在しない。使用する場合には、自らサブクラスを作成することになる。
これは、バイト出力ストリームに比べ、文字出力ストリームは「文字列」というフォーマットが決められているため、中継ぎでの「加工」をいにくいためである。
 
FilterWriterクラスサブクラスを作成する場合、まずコンストラクタWriterクラス引数に受け取り、FilterWriterクラスコンストラクタに渡す。そうすることで、FilterWriterクラスoutフィールドにこのWriterクラスが格納される。このWriterクラスは「出力先」に当たる。
その後、任意の(可能なら全ての)write()メソッドオーバーロードする。基本的には、outフィールドのwrite()メソッド呼び出して「出力先」へ文字データを出力する。ただし、このサブクラスいたい機能によっては、文字データを加工してから出力する。
write()メソッドは、このサブクラスを他の「中継ぎ」クラスもしくは「出力用」クラスに渡した場合、そのwrite()メソッドから呼び出される。
つまり、「出力用」→「中継ぎ」→「出力先」の順でwrite()メソッド呼び出していき、出力先の文字ストリームに出力する。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.Writer;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import java.io.FilterWriter;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        CharArrayWriter charArrayWriter = null;
        NormalFilterWriter normalFilterWriter = null;
        PrintWriter printWriter = null;
        try
        {
            // 「出力先」のCharArrayWriterクラスを用意します。
            charArrayWriter = new CharArrayWriter();

            // このクラスを対象とするNormalFilterWriterクラスを用意します。
            normalFilterWriter = new NormalFilterWriter( charArrayWriter );

            // このクラスを対象とするPrintWriterクラスを用意します。
            printWriter = new PrintWriter( normalFilterWriter );

            // つまり、

            // PrintWriter
            // ↓
            // NormalFilterWriter
            // ↓
            // CharArrayWriter

            // という形で、文字出力ストリームクラスが連結したことになります。

            // 出力します。
            printWriter.write( 'あ' );
            printWriter.write( 'い' );
            printWriter.write( 'う' );
            // NormalFilterWriter#write() : あ
            // NormalFilterWriter#write() : い
            // NormalFilterWriter#write() : う

            // 1文字単位で出力します。
            char[] chars = charArrayWriter.toCharArray();
            forint iF1 = 0; iF1 < chars.length; ++iF1 )
            {
                // 出力します。
                System.out.println( chars[iF1] );
            }
            // あ
            // い
            // う

            // このように、printWriterのwrite()メソッドを呼ぶと、
            // normalFilterWriterのwrite()メソッドを呼び出し、さらに
            // charArrayWriterのwrite()メソッドを呼び出します。
            // つまり文字出力ストリームが連結して「チェーン」になった
            // というわけです。
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( printWriter != null )
            {
                printWriter.close();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( normalFilterWriter != null )
                {
                    normalFilterWriter.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( charArrayWriter != null )
            {
                charArrayWriter.close();
            }
        }
    }
}

/**
*   NormalFilterWriterクラス。
*   FilterWriterクラスのサブクラスです。
*/
class NormalFilterWriter extends FilterWriter
{
    /**
    *   コンストラクタ。
    *   引数に「出力先」となる文字出力ストリームクラスを受け取ります。
    *   「中継ぎ」に当たるので、Writerクラスを引数に受け取ります。
    */
    public NormalFilterWriter( Writer out )
    {
        // 処理はスーパークラスが受け持ってくれるので、
        // スーパークラスに渡します。
        super( out );
    }

    /**
    *   write()メソッド。
    *   このクラスを利用する文字出力ストリームクラスの
    *   write()メソッドから呼び出されます。
    */
    public void write( int c ) throws IOException
    {
        // スーパークラスであるFilterWriterクラスの
        // outフィールドに「出力先」のWriterクラスが
        // 入っているので、そのwrite()メソッドを呼び出します。
        out.write( c );
        System.out.println( "NormalFilterWriter#write() : " + (char)c );
    }
}
// Sample.java
import java.io.Writer;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import java.io.FilterWriter;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        CharArrayWriter charArrayWriter = null;
        NormalFilterWriter normalFilterWriter = null;
        PrintWriter printWriter = null;
        try
        {
            // 「出力先」のCharArrayWriterクラスを用意します。
            charArrayWriter = new CharArrayWriter();

            // このクラスを対象とするNormalFilterWriterクラスを用意します。
            normalFilterWriter = new NormalFilterWriter( charArrayWriter );

            // このクラスを対象とするPrintWriterクラスを用意します。
            printWriter = new PrintWriter( normalFilterWriter );

            // つまり、

            // PrintWriter
            // ↓
            // NormalFilterWriter
            // ↓
            // CharArrayWriter

            // という形で、文字出力ストリームクラスが連結したことになります。

            // 出力します。
            printWriter.write( 'あ' );
            printWriter.write( 'い' );
            printWriter.write( 'う' );
            // NormalFilterWriter#write() : あ
            // NormalFilterWriter#write() : い
            // NormalFilterWriter#write() : う

            // 1文字単位で出力します。
            char[] chars = charArrayWriter.toCharArray();
            for( int iF1 = 0; iF1 < chars.length; ++iF1 )
            {
                // 出力します。
                System.out.println( chars[iF1] );
            }
            // あ
            // い
            // う

            // このように、printWriterのwrite()メソッドを呼ぶと、
            // normalFilterWriterのwrite()メソッドを呼び出し、さらに
            // charArrayWriterのwrite()メソッドを呼び出します。
            // つまり文字出力ストリームが連結して「チェーン」になった
            // というわけです。
        }
        finally
        {
            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( printWriter != null )
            {
                printWriter.close();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( normalFilterWriter != null )
                {
                    normalFilterWriter.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            // 処理が終わったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            if( charArrayWriter != null )
            {
                charArrayWriter.close();
            }
        }
    }
}

/**
*   NormalFilterWriterクラス。
*   FilterWriterクラスのサブクラスです。
*/
class NormalFilterWriter extends FilterWriter
{
    /**
    *   コンストラクタ。
    *   引数に「出力先」となる文字出力ストリームクラスを受け取ります。
    *   「中継ぎ」に当たるので、Writerクラスを引数に受け取ります。
    */
    public NormalFilterWriter( Writer out )
    {
        // 処理はスーパークラスが受け持ってくれるので、
        // スーパークラスに渡します。
        super( out );
    }

    /**
    *   write()メソッド。
    *   このクラスを利用する文字出力ストリームクラスの
    *   write()メソッドから呼び出されます。
    */
    public void write( int c ) throws IOException
    {
        // スーパークラスであるFilterWriterクラスの
        // outフィールドに「出力先」のWriterクラスが
        // 入っているので、そのwrite()メソッドを呼び出します。
        out.write( c );
        System.out.println( "NormalFilterWriter#write() : " + (char)c );
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/11/10
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。