BufferedReader 停留在最后输入行而没有结束程序
BufferedReader stuck at last input line without ending the program
我正在使用 BufferedReader
从 System.in
(文本文件重定向上下文:< file.txt
)读取数据,然后将其写入控制台。问题是我的程序显示了除最后一行之外的所有行,并且仍然可以在不执行任何操作的情况下运行。如果我手动结束它,它会写最后一行。
这是我的代码:
public void updateText() throws IOException {
try {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String inputLine;
while ((inputLine = bufferedReader.readLine()) != null) {
System.out.println(inputLine);
}
inputStreamReader.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这里是等待可用数据的替代方法(参考:Java 11 - method BufferedReader.ready()):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class TestClass {
public static void main(String[] args) {
try (InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
String line;
// wait until data available
while (!bufferedReader.ready()){
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例输出:
Hello world
Hello world
Hello world
Hello world
如果这仅发生在 Eclipse 中,您的问题很可能是 duplicate and bug 513713。
当您可以一步传输数据时,您不需要逐行读取标准输入,替换 updateText()
:
的主体
System.in.transferTo(System.out);
我正在使用 BufferedReader
从 System.in
(文本文件重定向上下文:< file.txt
)读取数据,然后将其写入控制台。问题是我的程序显示了除最后一行之外的所有行,并且仍然可以在不执行任何操作的情况下运行。如果我手动结束它,它会写最后一行。
这是我的代码:
public void updateText() throws IOException {
try {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String inputLine;
while ((inputLine = bufferedReader.readLine()) != null) {
System.out.println(inputLine);
}
inputStreamReader.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这里是等待可用数据的替代方法(参考:Java 11 - method BufferedReader.ready()):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class TestClass {
public static void main(String[] args) {
try (InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
String line;
// wait until data available
while (!bufferedReader.ready()){
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例输出:
Hello world
Hello world
Hello world
Hello world
如果这仅发生在 Eclipse 中,您的问题很可能是 duplicate and bug 513713。
当您可以一步传输数据时,您不需要逐行读取标准输入,替换 updateText()
:
System.in.transferTo(System.out);