我需要读取通过管道传输到我的 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/