我正在使用下面的代码在命令行上从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/

10-10 22:19
查看更多