BufferedReader.readLine()等待来自控制台的输入

时间:2013-01-29 10:52:52

标签: java console bufferedreader readline lines

我正在尝试从控制台读取文本行。线数预先不知道。 BufferedReader.readLine()方法读取一行但在最后一行之后它等待来自控制台的输入。应该怎么做以避免这种情况?

请参阅下面的代码段:

    public static String[] getLinesFromConsole() {
    String strLine = "";
    try {
        // Get the object of DataInputStream
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null)
            strLine += line + "~"; //edited

        isr.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strLine.split("~");
}

2 个答案:

答案 0 :(得分:4)

以下代码可能会修复,将文本exit替换为您的需求特定字符串

  public static String[] getLinesFromConsole() {
    String strLine = "";
    try {
        // Get the object of DataInputStream
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null && !line.equals("exit") )
            strLine += br.readLine() + "~";

        isr.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strLine.split("~");
}

答案 1 :(得分:1)

从控制台读取时,您需要定义一个“终止”输入,因为控制台(与文件不同)不会“结束”(即使在程序终止后它仍继续运行)。

您的问题有几种解决方案:

  1. 将输入放在文件中并使用IO重定向:java ... < input-file

    shell将使用输入文件连接您的进程,您将获得EOF。

  2. 键入控制台的EOF字符。在Linux和Mac上,它是 Ctrl + D ,在Windows上,它是 Ctrl + Z + Enter

  3. 读取空行时停止。这样,用户只需输入 Enter

  4. PS:您的代码中存在错误。如果您拨打readLine()两次,它将跳过每隔一行。