welcome: please sign in
location: "ファイル入力"の差分
1と12のリビジョン間の差分 (その間の編集: 11回)
2009-11-20 05:55:20時点のリビジョン1
サイズ: 470
編集者: masahiko
コメント:
2009-11-20 12:50:04時点のリビジョン12
サイズ: 3225
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 3: 行 3:
ファイル入出力のために、
つぎの4つをスーパークラスとする数十個のクラスが用意されています。
 . !InputStream バイト入力
 . !OutputStream バイト出力
 . Reader テキスト入力
 . Writer テキスト出力
なおこの4つは抽象クラスのため、直接利用することはできません。
----
テキスト形式のファイルからの入力には Readerクラスのサブクラスである !BufferedReader クラスを利用します。

!BufferedReader クラスの readLineメソッドを使うことで1行ずつ読み取ることができます。

利用する機能は次の3つです。
 {{{#!java
 BufferedReader b;
 String s;

 b = new BufferedReader( ... );
 s = b.readLine();
 b.close();
 }}}
 . 4行目で、!BufferedReaderクラスのインスタンスを作ります。
 . 5行目で、このインスタンスを使ってreadLineメソッドを使って1行分読み取り、結果を文字列sに代入しています。
 . 6行目で、ファイルを閉じています。
ファイルを使い終わったときには、ファイルを閉じる処理が必要です。<<BR>>
ファイルの使い始めのopenは必要ありません。インスタンスを作ればよい。
----
readLineメソッドはファイルの終わりに達したときは null を返します。<<BR>>
ファイルを1行づつ読んで終わりまで処理するには、5行目を次のように修正します。
 {{{
 while( true )
 {
     s = b.readLine();
     if(s == null)
         break;
 // 各行での必要な処理はここに書く
 }
 }}}
これと同じ内容を、次のように書くこともできます。
 {{{
 while( (s = b.readLine() ) != null)
 {
 // 各行での必要な処理はここに書く
 }
 }}}
----
!BufferedReaderインスタンスを作成するときには、
コンストラクタの引数として!FileReaderのインスタンスを与える必要があります。

!FileReaderコンストラクタの引数にはファイル名を与えます。

 {{{
 FileReader f;
 f = new FileReader( "filename" );
 b = new BufferedReader( f );
 }}}
インスタンスfはここでしか用いないので、次のように記述することもある。
 {{{
 b = new BufferedReader( new FileReader( "filename" ) );
 }}}
ファイル名や1文字ごとの情報は!FileReaderインスタンスの状態として保持され、
行単位の情報は!BufferedReaderインスタンスの状態として保持されると考えればよい。
 . {{attachment:filereader1.png}}

処理は!BufferedReaderインスタンスへのメソッドを通して行います。
----

ファイル入力

ファイル入出力のために、 つぎの4つをスーパークラスとする数十個のクラスが用意されています。

  • InputStream バイト入力

  • OutputStream バイト出力

  • Reader テキスト入力
  • Writer テキスト出力

なおこの4つは抽象クラスのため、直接利用することはできません。


テキスト形式のファイルからの入力には Readerクラスのサブクラスである BufferedReader クラスを利用します。

BufferedReader クラスの readLineメソッドを使うことで1行ずつ読み取ることができます。

利用する機能は次の3つです。

  •    1  BufferedReader b;
       2  String s;
       3 
       4  b = new BufferedReader( ... );
       5  s = b.readLine();
       6  b.close();
    
  • 4行目で、BufferedReaderクラスのインスタンスを作ります。

  • 5行目で、このインスタンスを使ってreadLineメソッドを使って1行分読み取り、結果を文字列sに代入しています。
  • 6行目で、ファイルを閉じています。

ファイルを使い終わったときには、ファイルを閉じる処理が必要です。
ファイルの使い始めのopenは必要ありません。インスタンスを作ればよい。


readLineメソッドはファイルの終わりに達したときは null を返します。
ファイルを1行づつ読んで終わりまで処理するには、5行目を次のように修正します。

  •  while( true )
     {
         s = b.readLine();
         if(s == null)
             break;
     //  各行での必要な処理はここに書く
     }

これと同じ内容を、次のように書くこともできます。

  •  while( (s = b.readLine() ) != null)
     {
     //  各行での必要な処理はここに書く
     }


BufferedReaderインスタンスを作成するときには、 コンストラクタの引数としてFileReaderのインスタンスを与える必要があります。

FileReaderコンストラクタの引数にはファイル名を与えます。

  •  FileReader f;
     f = new FileReader( "filename" );
     b = new BufferedReader( f );

インスタンスfはここでしか用いないので、次のように記述することもある。

  •  b = new BufferedReader( new FileReader( "filename" ) );

ファイル名や1文字ごとの情報はFileReaderインスタンスの状態として保持され、 行単位の情報はBufferedReaderインスタンスの状態として保持されると考えればよい。

  • filereader1.png

処理はBufferedReaderインスタンスへのメソッドを通して行います。


   1 public class ReadSample
   2 {
   3         public static void main(String[] args)
   4         {
   5                 try
   6                 {
   7                         java.io.FileReader f;
   8                         java.io.BufferedReader b;
   9                         String s;
  10                         
  11                         f = new java.io.FileReader( args[0] );
  12                         b = new java.io.BufferedReader( f );
  13                         
  14                         while( (s = b.readLine()) != null)
  15                         {
  16                                 System.out.println( s );
  17                         }
  18                         
  19                         b.close();
  20                 } catch(Exception e) {
  21                         System.out.println( e );
  22                 }
  23         }
  24 }

ファイル入力 (最終更新日時 2009-11-25 00:33:32 更新者 masahiko)