stanimal
stanimal

Reputation: 23

Java command line input with heredoc

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?

Upvotes: 2

Views: 778

Answers (2)

Jord&#227;o
Jord&#227;o

Reputation: 56467

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();
}

Upvotes: 3

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

Upvotes: 2

Related Questions