命令行参数丢失?

Command-Line Arguments Being Lost?

我正在编写一个 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

谁能解释这是为什么?

< 运算符将此文件重定向到此 Java 进程的标准输入

所以

如果你有

java Classifier < March.csv

并尝试读取参数,您会看到 none,如果您读取标准输入,您会读取文件内容

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

删除 <,以便发送您打算发送到 main 的所有命令行参数。