2012-04-18 21 views
1

私のプログラミングの最終試験のために勉強しています。私は文字列fileNameに格納されているファイルを開き、personNameという文字列のファイルを見るプログラムを書かなければなりません。personNameの後に最初の文字列を表示し、プログラムを終了してからプログラムを終了してください。 引数personName IOExceptionが発生した場合、IOエラーが発生し、プログラムはsystem.exit(0)を使用してexsitする必要があります。Javaのテキストファイルから文字列を読み取る

このファイルには、この名前はありません。プログラムはinfo.txtファイルを使用する必要があり、各行には2つの文字列 が最初の文字列名と2番目の年齢を含む必要があります。

すべてが一つの方法であることが必要

data.txtを、これまでこのため

最大60.0

ジョー19.0

アリ20.0

私のコードが含まれています:

public class Files{ 

    public void InfoReader(String fileName, String personName) 
    { 

     try{ 
     try{ 
        // Open the file that is the first 
        // command line parameter 
        FileInputStream fstream = new FileInputStream("C://rest//data.txt"); 
        // Get the object of DataInputStream 

        DataInputStream in = new DataInputStream(fstream); 
        BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

        //Read File Line By Line 
        while ((fileName = br.readLine()) != null) { 
         // Print the content on the console 
         (new Files()).infoReader("info.txt","Joe"); //this prints the age 
        } 
        //Close the input stream 
        in.close(); 
       } 

       catch (IOException e) 
       {//Catch exception if any 
        System.out.println(" there is an IO Error"); 
        System.exit(0); 
       } 
    } 
    catch (Exception e) 
       {//Catch exception if any 
        System.out.println("that name doesn't exists"); 

       } 
    } 
} 

infoReader(info.txt,Joe);19.0
を印刷する必要がありますしかし、私は任意のヘルプははるかに高く評価されるだろうjava.lang.StackOverflowError

を取得しています!

ありがとうございます!

+1

問題の説明は明らかですが、具体的な問題は何ですか? – amit

+0

私はそれを印刷すると、スタックオーバーフローエラーを取得し、私は年齢を取得しないでください –

+0

全体のスタックトレースとあなたが得ている正確なエラーを添付してください。 – amit

答えて

1

これは私があなたがやろうとしていることです。もしそうでなければ、少なくとも例として働くことができます。 amitと同じように、あなたの現在のエラーは再帰呼び出しのためです。私は必要ではないと思います。

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Files { 

    public void InfoReader(String fileName, String personName) { 
     try { 
      // Open the file that is the first command line parameter 
      FileInputStream fstream = new FileInputStream(fileName); 

      // Get the object of DataInputStream 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

      String line = null; 

      //Loop until there are no more lines in the file 
      while((line = br.readLine()) != null) { 
       //Split the line to get 'personaName' and 'age'. 
       String[] lineParts = line.split(" "); 

       //Compare this line personName with the one provided 
       if(lineParts[0].equals(personName)) { 
        //Print age 
        System.out.println(lineParts[1]); 
        br.close(); 
        System.exit(0); 
       } 
      } 

      br.close(); 
      //If we got here, it means that personName was not found in the file. 
      System.out.println("that name doesn't exists"); 
     } catch (IOException e) { 
      System.out.println(" there is an IO Error"); 
     } 
    } 
} 
0

Scannerクラスを使用すると、それはあなたの人生をはるかに簡単にします。

Scanner fileScanner = new Scanner (new File(fileName)); 

    while(fileScanner.hasNextLine() 
    { 
     String line = fileScanner.nextLine(); 

     Scanner lineScanner = new Scanner(line); 

     String name = lineScanner.next(); // gets the name 
     double age = Double.parseDouble(lineScanner.next()); // gets the age 

     // That's all really! Now do the rest! 
    } 
0

エンコードを忘れないでください!

List<String> lines = FileUtils.readLines(file, encoding) 
関連する問題