Java如何读取stdin?

标签 java input

我需要读取通过管道传输到我的 java 程序的输入。这是一个简单的任务,但我在网上找不到它。

这是我尝试过的:

private static String getInput() throws IOException {
  StringBuilder sb = new StringBuilder();
  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  String line;
  while ((line = reader.readLine()) != null) {
    sb.append(line);
  }

  return sb.toString();
}

首先,是否有更简单的方法来做到这一点(在 java 11 中,或者可能使用库)?对于这样一个简单的任务来说,似乎有很多行。

大多数情况下,如果没有管道输入,它似乎不起作用,它会挂起,例如当我只想它返回 null 时。

最佳答案

从 Java 8 开始,您可以将所有行读入 String<Stream> :

private static String getInput() {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    return reader.lines().collect(Collectors.joining("\n"));
}

如果您想保留换行符,可以使用 Collectors.joining() 的重载。 ,例如Collectors.joining("\n")

交互式输入的问题是:你可能不知道是否有其他线路到来。因此,您必须使用操作系统输入来发出文件结束信号。
在 Windows 上,这是序列 Ctrl+Z,而在 Linux 上,则是 Ctrl+D

关于Java如何读取stdin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61368474/

相关文章:

java - 获取 Grails 中最受欢迎的项目

c++ - 使用 Qt QTableWidget 接收多个用户输入值

python - 如何获取用户输入并在 python 中进行搜索?

Java BigDecimal除法乘法四舍五入到2位小数

java - youTube 数据 API V3 - 使用 PublishedAfter 时搜索返回错误 400

java - 使用 Spring JPA/Hibernate 的条件插入

javascript - 当用户更改输入时,React 不会更新组件状态

java - 如何使用 Gradle 4.4 创建一个包含所有依赖项的 jar?

python - 用户从编号列表输入并返回列表

javascript - 如何处理 jQuery 中的数字输入更改?