Как определить, содержат ли аргументы командной строки перенаправление потока - PullRequest
2 голосов
/ 05 октября 2011

Я пишу программу, которая выполняет одно действие, если в командной строке содержится перенаправление потока, например > или <, но в противном случае выполняет другое действие.

Моим первым инстинктом было перебрать командную строку и проверить, равен ли каждый аргумент символу перенаправления, например:

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

Однако, он всегда возвращает false. Строка System.out.println(args[i]); показывает, что любое перенаправление и последующее имя файла не распознаются. Например:

project\src>java myProgram.Client localhost 1234 > myFile.txt
localhost
1234

тогда как должно быть:

project\src>java myProgram.Client localhost 1234 > myFile.txt
localhost
1234
>
myFile.txt

Есть ли более простой способ сделать это? Спасибо за ваше время!

Ответы [ 2 ]

5 голосов
/ 05 октября 2011

Перенаправление является частью синтаксиса оболочки, а не чем-то переданным программе. Вместо этого проверьте, возвращает ли System.console() ненулевое значение.

3 голосов
/ 05 октября 2011

Весь смысл механизма перенаправления в том, что программе не нужно заботиться.Если вам нужно сделать что-то другое, добавьте аргумент командной строки.

...