java - BufferedReader 卡在最后一个输入行而不结束程序
问题描述
我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 - 方法 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
推荐阅读
- css - 填充某些网格项css的所有宽度
- python - 如何将任何字母转换为破折号(用于刽子手游戏)
- go - Imaginary 在高负载时感到恐慌
- apache-kafka - 是否可以在 osquery 代理上配置 Kafka SASL 身份验证?
- javascript - 无法触发 WebRTC 跟踪事件
- javascript - Firebase Cloud Storage:资源:服务器响应状态为 403 ()
- xamarin.forms - Xamarin FreshMVVM - 选项卡式导航 ViewIsAppearing 方法未在初始选项卡单击时触发
- android - 文本数据绑定在 Retrofit2 回调中不起作用
- python - 将熊猫数据框中的对象数据类型动态转换为分类的最佳实践
- javascript - 不间断地播放多个 HTML 视频