如何判断命令行参数是否包含流重定向

A D*_*A D 2 java redirect command-line parsing

我正在编写一个程序,如果命令行包含流重定向(例如>或)<,则执行一个操作,否则执行另一个操作.

我的第一直觉是遍历命令行并检查每个参数是否等于重定向符号,如下所示:

public boolean hasRedirection(String[] args){
    boolean flag = false;
    int length = args.length;
    int i;
    for(i = 0; i < length; i++){
        System.out.println(args[i]);
        if(args[i].equals(">") || args[i].equals("<"))
            flag = true;
    }
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

但是,它总是返回false.该行System.out.println(args[i]);显示未识别任何重定向和后续文件名.例如:

project\src>java myProgram.Client localhost 1234 > myFile.txt
localhost
1234
Run Code Online (Sandbox Code Playgroud)

而它应该是:

project\src>java myProgram.Client localhost 1234 > myFile.txt
localhost
1234
>
myFile.txt
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法可以做到这一点?谢谢你的时间!

Dan*_*man 5

重定向是shell语法的一部分,而不是传递给程序的东西.而是检查是否System.console()返回非空值.

  • 顺便说一下,要注意根据这样的事情改变程序的行为.当输出不是控制台时,可以省略颜色代码,但除此之外,请注意它.人们会认为简单的重定向不会改变程序的行为. (4认同)