我正在编写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
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
shell将< March.csv
解释为输入重定向。 March.csv
的内容会发送到您忽略的程序标准输入。在Java程序启动之前,这会发生在shell中。因此,只有February.csv
作为命令行参数发送到main
。
删除<
,以便发送您要发送给main
的所有命令行参数。
答案 1 :(得分:1)
<
运算符将此文件重定向到stdin到此Java进程
所以
如果你有
java Classifier < March.csv
并尝试读取参数,您将看不到任何内容,如果您读取stdin,则会读取文件内容