命令行参数丢失了吗?

时间:2015-04-16 00:07:45

标签: java command-line-arguments

我正在编写Java程序来清理一些数据。

我传递了我需要的文件,但忽略了第一个文件!

重现问题的最低代码:

public class Classifier {
  public static void main(String[] args) throws IOException {
    System.out.println(args[0]);
    for (String s : args) {
      System.out.println(s);
    }
  }
}

我使用以下命令行参数运行它:

java Classifier < March.csv February.csv

我收到的输出是:

February.csv February.csv

有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

shell将< March.csv解释为输入重定向。 March.csv的内容会发送到您忽略的程序标准输入。在Java程序启动之前,这会发生在shell中。因此,只有February.csv作为命令行参数发送到main

删除<,以便发送您要发送给main的所有命令行参数。

答案 1 :(得分:1)

<运算符将此文件重定向到stdin到此Java进程

所以

如果你有

java Classifier < March.csv

并尝试读取参数,您将看不到任何内容,如果您读取stdin,则会读取文件内容

相关问题