1

プログラミングの最終試験のために勉強しています。文字列fileNameに格納されているファイルを開き、ファイルでpersonNameという文字列を探すプログラムを作成する必要があります。これにより、personNameの後に最初の文字列が出力され、引数personNameがファイルにない場合は、「この名前は存在しません」と出力し、IOExceptionが発生した場合は、「IOエラーがあります」と出力し、プログラムはsystem.exit(0)を使用して終了する必要があります。

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

すべてが1つの方法である必要があります

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

どんな助けでも大歓迎です!!

前もって感謝します!

4

3 に答える 3

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");
        }
    }
}
于 2012-04-18T17:20:54.910 に答える
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!
   }
于 2012-04-18T17:20:24.483 に答える
0

commons-ioを使用し、エンコーディングを忘れないでください!

List<String> lines = FileUtils.readLines(file, encoding)
于 2012-07-24T07:17:13.567 に答える