BufferedReader无法读取java中的最后一行

时间:2013-10-23 19:13:03

标签: java bufferedreader

在我的代码中,我从控制台获取输入并从中读取:

InputStreamReader sc = new InputStreamReader(System.in);
BufferedReader bufRead = new BufferedReader(sc);

但是当我无法阅读最后一行输入时?

例如: 如果我想阅读c,控制台输入如下所示,

在c

之后什么也没有

一个
b
C(EOF)

但是对于像这样的输入控制台,在那里有一行之后就可以读取c

一个
b
ç
(EOF)

实际代码:

        InputStreamReader sc = new InputStreamReader(System.in);
        BufferedReader bufRead = new BufferedReader(sc);
        String s = bufRead.readLine();
        int t = Integer.parseInt(s);
        int k = 0; // no. of city

        for (int l = 0; l < t; l++) {
            s = bufRead.readLine();
            k = Integer.parseInt(s);
            cityDetails = new String[3][k];

            for (int j = 0; j < k; j++) {
                s = bufRead.readLine();
                StringTokenizer st = new StringTokenizer(s);
                cityDetails[0][j] = st.nextToken();
                cityDetails[1][j] = st.nextToken();
                cityDetails[2][j] = st.nextToken();
            }
            s = bufRead.readLine();
            dist = Double.parseDouble(s);
             System.out.println(dist);

}

1 个答案:

答案 0 :(得分:0)

您需要阅读直到BufferedReader不返回null。它需要循环。
以下是Mykong的一个例子

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {

    public static void main(String[] args) {

        BufferedReader br = null;

        try {

            String sCurrentLine;

            br = new BufferedReader(new FileReader("C:\\testing.txt"));

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }
}  

忽略文件部分。重要的是如何使用BufferedReader阅读。键盘输入和文件保持不变。

或者,您可以使用java.util.Scanner方法来读取不同类型的原始数据。