JavaA2Z

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

EOFException

日本語 書類末端例外
英語 End Of File exception
ふりがな えんどおぶふぁいるえくせぷしょん
フリガナ エンドオブファイルエクセプション

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.EOFException。
例外の一種。
DataInputStreamクラスを用いてファイルを入力する際に、「EOF」、つまりファイルの末端まで来た場合に投げられる
他の入力系ストリームクラスの場合、ファイルの末端は戻り値として返されるため、EOFExceptionクラスは投げられない。そのため拾う機会は少ないだろう。

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

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

// Sample.java
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.EOFException;

public class Sample
{
    public static void main( String[] args )
    {
        // 入出力ファイルの絶対パス。
        String filePath = "D:/sample.data";

        // まずは出力。

        // FileOutputStreamクラスとDataOutputStreamクラスの参照型変数。
        // ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
        FileOutputStream fileOutputStream = null;
        DataOutputStream dataOutputStream = null;
        try
        {
            // ストリームを開きます。
            fileOutputStream = new FileOutputStream( filePath );
            dataOutputStream = new DataOutputStream( fileOutputStream );

            // ストリームを通して、データを書き込みます。
            dataOutputStream.writeInt( 100 );
            dataOutputStream.writeUTF( "あいうえお" );
            dataOutputStream.writeInt( 200);
            // こうして、ファイルにデータが書き込まれました。
            // このデータは一種のバイナリーファイルになります。
        }
        catch( IOException e )
        {
            // ファイルが無かった場合等に、この
            // IOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            // ファイルを扱ったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( dataOutputStream != null )
                {
                    dataOutputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            try
            {
                if( fileOutputStream != null )
                {
                    fileOutputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }

        // ここから入力。

        // FileInputStreamクラスとDataInputStreamクラスの参照型変数。
        // ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
        FileInputStream fileInputStream = null;
        DataInputStream dataInputStream = null;
        try
        {
            // ストリームを開きます。
            fileInputStream = new FileInputStream( filePath );
            dataInputStream = new DataInputStream( fileInputStream );

            try
            {
                // データを読み込みます。
                int i1 = dataInputStream.readInt();
                String string = dataInputStream.readUTF();
                int i2 = dataInputStream.readInt();
                System.out.println( i1 );
                System.out.println( string );
                System.out.println( i2 );
                // 100
                // あいうえお
                // 200

                // 最後まで来てるのに読み込もうとすると、
                // EOFException例外が投げられます。
                char ch = dataInputStream.readChar();
            }
            catch( EOFException e )
            {
                System.out.println( "ファイルの最後まで来ました。" );
                // このように、ファイルの最後に来ると
                // EOFExceptionが投げられます。
                // 他のストリームの場合、戻り値に「ファイルの最後まで来た」
                // ことを示す値が返されるのですが、DataInputStreamクラスの
                // 場合、プリミティブ型を返すのでそれができません。
                // そのため、代わりにEOFException例外を投げるのです。
                // 設計的に、いいとは言えませんが……。
            }
        }
        catch( IOException e )
        {
            // ファイルが無かった場合等に、この
            // IOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            // ファイルを扱ったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( dataInputStream != null )
                {
                    dataInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            try
            {
                if( fileInputStream != null )
                {
                    fileInputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}
// Sample.java
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.EOFException;

public class Sample
{
    public static void main( String[] args )
    {
        // 入出力ファイルの絶対パス。
        String filePath = "D:/sample.data";

        // まずは出力。

        // FileOutputStreamクラスとDataOutputStreamクラスの参照型変数。
        // ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
        FileOutputStream fileOutputStream = null;
        DataOutputStream dataOutputStream = null;
        try
        {
            // ストリームを開きます。
            fileOutputStream = new FileOutputStream( filePath );
            dataOutputStream = new DataOutputStream( fileOutputStream );

            // ストリームを通して、データを書き込みます。
            dataOutputStream.writeInt( 100 );
            dataOutputStream.writeUTF( "あいうえお" );
            dataOutputStream.writeInt( 200);
            // こうして、ファイルにデータが書き込まれました。
            // このデータは一種のバイナリーファイルになります。
        }
        catch( IOException e )
        {
            // ファイルが無かった場合等に、この
            // IOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            // ファイルを扱ったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( dataOutputStream != null )
                {
                    dataOutputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            try
            {
                if( fileOutputStream != null )
                {
                    fileOutputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }

        // ここから入力。

        // FileInputStreamクラスとDataInputStreamクラスの参照型変数。
        // ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
        FileInputStream fileInputStream = null;
        DataInputStream dataInputStream = null;
        try
        {
            // ストリームを開きます。
            fileInputStream = new FileInputStream( filePath );
            dataInputStream = new DataInputStream( fileInputStream );

            try
            {
                // データを読み込みます。
                int i1 = dataInputStream.readInt();
                String string = dataInputStream.readUTF();
                int i2 = dataInputStream.readInt();
                System.out.println( i1 );
                System.out.println( string );
                System.out.println( i2 );
                // 100
                // あいうえお
                // 200

                // 最後まで来てるのに読み込もうとすると、
                // EOFException例外が投げられます。
                char ch = dataInputStream.readChar();
            }
            catch( EOFException e )
            {
                System.out.println( "ファイルの最後まで来ました。" );
                // このように、ファイルの最後に来ると
                // EOFExceptionが投げられます。
                // 他のストリームの場合、戻り値に「ファイルの最後まで来た」
                // ことを示す値が返されるのですが、DataInputStreamクラスの
                // 場合、プリミティブ型を返すのでそれができません。
                // そのため、代わりにEOFException例外を投げるのです。
                // 設計的に、いいとは言えませんが……。
            }
        }
        catch( IOException e )
        {
            // ファイルが無かった場合等に、この
            // IOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            // ファイルを扱ったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( dataInputStream != null )
                {
                    dataInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            try
            {
                if( fileInputStream != null )
                {
                    fileInputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

この単語を含むページ

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

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

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

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