Java 命令行输入与heredoc

发布于 2024-11-24 01:52:22 字数 269 浏览 2 评论 0原文

我有一个令人沮丧的简单问题:我需要编写一个接受以下形式输入的程序:

cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF

但是当我尝试在 main() 中对其执行任何操作时,我的 args[] 始终为空。甚至cat << EOF | echo 后跟输入不会在终端产生任何输出。我在这里做错了什么?

I have a frustratingly simple problem: I need to write a program that accepts input of the form:

cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF

But my args[] is always empty when I try to do anything with it in main(). Even cat << EOF | echo followed by input doesn't produce any output at the terminal. What am I doing wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倾城°AllureLove 2024-12-01 01:52:22

使用标准输入流

public static void main(String[] args) throws Exception {
  InputStreamReader inputReader = new InputStreamReader(System.in);
  BufferedReader reader = new BufferedReader(inputReader);
  String line = null;
  while ((line = reader.readLine()) != null) {
    System.out.println(line);
  }
  reader.close();
  inputReader.close();
}

Use the standard input stream:

public static void main(String[] args) throws Exception {
  InputStreamReader inputReader = new InputStreamReader(System.in);
  BufferedReader reader = new BufferedReader(inputReader);
  String line = null;
  while ((line = reader.readLine()) != null) {
    System.out.println(line);
  }
  reader.close();
  inputReader.close();
}
几度春秋 2024-12-01 01:52:22

您没有向程序提供任何参数,因此 args[] 当然是空的。

您可以从 System.in 阅读此处文档。

您似乎对参数 (args[]) 和 stdin (System.in) 之间的区别感到困惑。

echo 将其参数 (args[])写入stdout,例如:

$ echo foo bar
foo bar

cat将其 stdin (System.in) 写入 stdout,例如:

$ cat << EOF
> foo bar
> EOF
foo bar

$ echo foo bar | cat     # Useless use of cat
foo bar

Your cat << EOF | echo 示例不起作用,因为 echo 不读取 stdin

另外,您使用 cat 是没有用的。你可以只写

$ java myProgram.java << EOF
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF

You didn't provide any arguments to the program, so of course args[] is empty.

You can read the heredoc from System.in.

You seem confused about the difference between arguments (args[]) and stdin (System.in).

echo writes its arguments (args[]) to stdout, e.g.:

$ echo foo bar
foo bar

cat writes its stdin (System.in) to stdout, e.g.:

$ cat << EOF
> foo bar
> EOF
foo bar

or

$ echo foo bar | cat     # Useless use of cat
foo bar

Your cat << EOF | echo example doesn't work because echo does not read stdin.

Also, your use of cat is useless. You can just write

$ java myProgram.java << EOF
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文