2016-10-03 21 views
0

ブロック(テキストファイル)にすべてのレコードを表示し、フィールド区切り文字を「カバー」するために分割する必要がありますが、ブロックの最初のレコードのみが表示されます。私は間違って何をしていますか?私のメソッドが私のファイルのすべてを読んでいないのはなぜですか? ... Java?

enter code here 
public static void listAllStudents() throws IOException { 

    File path = new File(Descriptor.getBlockPath()); 

    for (int i = 0; i < path.listFiles().length; i++) { 

     try { 
      FileInputStream file = new FileInputStream(Descriptor.getBlockPath() + "BLK" + i + ".txt"); 
      InputStreamReader entrada = new InputStreamReader(file); 
      BufferedReader buf= new BufferedReader(entrada); 
      String piece = " "; 

      System.out.println("\nBLOCO " + i + " ------------------------------------------------------ +"); 

      do { 


       if (buf.ready()) { 
        piece = buf.readLine(); 
        System.out.println("\n¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨"); 

        String string = " ", field[] = piece.split(Descriptor.getFieldSeparator()); 
        string = " "; 

        System.out.println("CPF: " + field[0]); 
        System.out.println("Name: " + field[1]); 
        System.out.println("Course: " + field[2]); 
        System.out.println("Age: " + field[3]); 
        System.out.println("Phone: " + field[4]); 
        System.out.println("Active: " + field[5]); 

        string = " "; 
       } 

      } while (buf.ready()); 

      buf.close(); 
     } catch (IOException e) { 
      System.out.println(); 
     } 
    } 

} 
+0

「ready()」の古典的な誤用。ストリームの終わりのための有効なテストではありません。 – EJP

答えて

0

BufferedReader.readLine() methodのためのマニュアルを参照してください:

またはnullストリームの終わりに

に達している場合は、行毎にファイルを読み込むようにコードを変更します。

while ((piece = buf.readLine()) != null) { 
    String field[] = piece.split(Descriptor.getFieldSeparator()); 

    if (field.length >= 6) { 
       System.out.println("CPF: " + field[0]); 
       System.out.println("Name: " + field[1]); 
       System.out.println("Course: " + field[2]); 
       System.out.println("Age: " + field[3]); 
       System.out.println("Phone: " + field[4]); 
       System.out.println("Active: " + field[5]); 
    } 
} 
+0

'#ready()'は終了に達したことを通知しません。 – Tom

+0

いいえ、https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready() –

+0

およびhttp://stackoverflow.com/a/5244928/2310289をお読みください。 –

関連する問題