2010-11-30 21 views
3

できるだけ明確にしようとしますが、私の質問が完璧でない場合は私を許してください。 私はいくつかの行のデータを持つtxtファイルを持っています。例:txtファイルの行を読む[java]

123ラルフボーズ20000 200 1 2

256のEDシェーン30000 100 2 4

... Iは各ラインを順次読み出しおよび方法にまで戻すことを渡す必要が

処理のための別のクラス。 StringTokenizerを使って各行を要素に分割する方法を知っています。

しかし、一度に1行を読み、その要素を他のクラスに戻し、処理が完了したら、NEXT行を読み込む方法がわかりません。クラス間のメソッドの連携はうまく動作しますが、一度に1行を読み込むにはどうすればよいですか?

私は、各行が配列要素となる配列を作成することを考えていましたが、行数が不明なため、最終的な長さがわからないため配列を作成できません。

おかげ

馬場

EDIT

ラフセットアップ:

クラス

end_of_file = f1.readRecord(emp); 

     if(!end_of_file) 
     { 
      slip.printPay(slipWrite); 
     } 

クラスB

public boolean readRecord(Employee pers) throws IOException { 

     boolean eof = false ; 

     String line = in.readLine() ; 

       ??? 

       } 

ファイル名が

の周りに渡されることはありませんので、ここまで私は最初の行を読み取ることができますが、私は彼らに背を持つ一つ一つを読み取るためにラインをループへの道が必要だと思いますクラス間で

トリッキー...

答えて

4

一度に1行全体を読み取る方法はたくさんあります。 Scannerは、おそらく最も簡単です:

final Scanner s = new Scanner(yourFile); 
while(s.hasNextLine()) { 
    final String line = s.nextLine(); 
    YourClass.processLine(line); 
} 
+0

こんにちはマイケルの作品を願って、私は大体の協力を説明しようとするコードのビットを追加しました。私は思う私のセットアップでファイル名を使用することはできません? – raoulbia

+1

@Baba 'yourFile'は実際にはファイル名ではなく[' File'](http://download.oracle.com/javase/6/docs/api/java/io/File.html)のインスタンスですが、本当に問題ではありません。私はあなたが投稿したコードを完全に理解していません。このコードは、ファイルから各行を読み込み、その行全体を 'YourClass.processLine'に渡します。それはあなたが探しているものですか?それ以外に何が必要ですか? –

+0

私の問題は、end_of_fileブール値のようです。そのbooleanがtrueに設定されない限り、処理(printPay())には入りません。しかし、私は私が処理IF文をどのように入力するのか混乱しているので、私は各行を読み終えるまでそれを行うことはできません。私は私のreadRecordメソッドを再加工する必要があると思う。 – raoulbia

3
void readLine(String fileName) 
{ 
    java.io.BufferedReader br = null; 
    try 
    { 
     br = new java.io.BufferedReader(new java.io.FileReader(fileName)); 
     String line = null; 
     while(true) 
     { 
      line = br.readLine(); 
      if(line == null) 
      break; 
      // process your line here 
     } 
    }catch(Exception e){ 
    }finally{ 
    if(br != null) 
     { 
     try{br.close();}catch(Exception e){} 
     } 
    } 
} 

また、あなたは、文字列を分割したい場合は...

文字列クラスsplitメソッドを使用します。スペースに応じて...あなたが行うことができ、分割のために... line.split("\\s*")

は、それが

+1

これはあなた次第ですが、while(true)とbreakを出す代わりに、while(line = br.readLine())!= null) 'のような状況の共通のイディオムがあります。 –

+0

@マイケル:まあコーディング中に私が言及した標準に従って...しかし、明確に私は余分な手順にそれを分解している:) – Favonius