我正在使用下面的代码在命令行上从stdin读取sql语句:
BufferedReader in = null;
StringBuilder sb = new StringBuilder();
String line = null;
try {
in = new BufferedReader(new InputStreamReader(System.in));
while((line = in.readLine()) != null) {
sb.append(line);
}
} finally {
if (in!=null) in.close();
}
我的问题是,应用程序有时需要使用来自stdin的数据运行,而有时不需要(没有管道输入)。如果以上代码中没有输入,则
in.readLine()
块。有没有办法重写此代码,以便在没有任何管道输入的情况下仍可以运行?更新:该应用程序旨在从命令行而不是从键盘传递管道数据。
最佳答案
我认为没有任何方法可以检查您是否最终会获得另一行输入。请注意,如果用户关闭输入流(例如,在终端中使用^ D),则当前代码不会终止。BufferedReader.ready()
检查流中是否有一些数据。就像T.J.提到,您可能很不幸,在实际收到数据之前要求提供数据,并且您的用户会很难过,因为您没有回答他们的查询。Scanner.hasNextLine()
是一项阻止操作,因此可能不是您要查找的内容。
您可以让用户指定是否从System.in中读取,例如通过使用命令行参数。
关于java - 有没有办法有时需要来自stdin的数据,有时不需要Java中的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10319795/