2011-10-05 6 views
2

명령 줄에 > 또는 <과 같은 스트림 리디렉션이 포함되어 있지만 다른 동작이 필요한 경우 한 동작을 수행하는 프로그램을 작성하고 있습니다.명령 줄 인수에 스트림 리디렉션이 있는지 확인하는 방법

나의 첫번째 본능은 명령 줄을 통해 루프이었고, 각 인수는 리디렉션 기호와 동일한 경우는 다음과 같이 확인 :

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 

내가이 작업을 수행 할 수있는 간단한 방법이 있나요? 시간 내 줘서 고마워!

+0

리디렉션은 셸에서 제공하는 메커니즘이므로, 사용자가 'main'에 전달하기 전에 인수에서 제거 된 것으로 가정합니다. –

답변

5

리다이렉션은 쉘 구문의 일부이며 프로그램에 전달되는 것이 아닙니다. 대신 System.console()이 널이 아닌 값을 리턴하는지 점검하십시오.

+0

위대한 일을했습니다. 고마워요! –

+4

그런데 이런 식으로 프로그램의 동작을 변경하는 것에주의하십시오. 출력이 콘솔이 아니지만 그 외의 경우에는 색상 코드를 생략해도 괜찮습니다.주의해야합니다. 사람들은 단순한 리디렉션이 프로그램의 동작을 변경하지 않는다고 가정합니다. –

3

리디렉션 메커니즘의 전체적인 점은 프로그램이 신경 쓸 필요가 없다는 것입니다. 다른 작업을 수행해야하는 경우 명령 줄 인수를 추가하십시오.

+0

+1 -이 문제를 해결하는 올바른 방법입니다. 다른 아이디어는 두 개의 다른 명령 이름 또는 쉘 레벨 명령 별명을 가진 하나의 명령입니다. –

관련 문제