2010-03-10 3 views
5

입력이 대화 형 (예 : 콘솔) 인 경우 명령 프롬프트를 인쇄하고 싶습니다. 예 : ">"Java System.in이 "대화 형"인지 확인하는 방법이 있습니까?

하지만 리디렉션되는 경우. 파일로부터, 나는 프롬프트를 원하지 않는다.

System.in은 이에 대한 메소드가없는 추상 InputStream입니다.

구체적인 유형이 다른 경우 instanceof를 사용할 수 있습니까? System.out을 파일로 재 지정된 경우

뿐만 아니라, 나는 또한

+0

을 JNI를 사용하여 리눅스 고유의 솔루션은 [여기]를 참조 (http://stackoverflow.com/a/18371202/446591). 'fileno (stderr)'를'fileno (stdin)'로 바꾸면된다. –

+0

[Java 프로그램의 입/출력 스트림이 터미널에 연결되어 있는지 어떻게 확인할 수 있습니까?] (http://stackoverflow.com/questions/1403772/how-can-i-check-if-a-java -programs-input-output-streams-are-a-term) –

답변

4

AFAIK 메시지를 표시하지 않으려는, 거기에 순수 자바에서이 작업을 수행 할 수있는 방법입니다, 심지어 JNI/JNA에 그 일을하는 것 복잡한.

JDK 1.6에서 소개 된 새로운 콘솔 API를 사용할 수도 있습니다. 이렇게하면 콘솔에 대한 리더/라이터를 가져올 수 있습니다. 성공하면 결과가 대화식으로 보장됩니다. 의미한다는 의미입니다.

두 번째 방법은 응용 프로그램을 시작하는 데 사용하는 래퍼 스크립트의 다리 작업을 확인하고 시스템 속성을 통해 Java로 정보를 전달하는 것입니다. 예를 들어, GNU/Linux 시스템에서는 stdin이 "tty"장치에 연결되었는지 알기 위해 tty(1) 명령을 사용할 수 있습니다.

+1

그게 효과가있다. 콘솔이 연결되어 있지 않으면 System.console()이 null을 반환하는 것처럼 들립니다. http://java.sun.com/javase/6/docs/api/java/io/Console.html –

+1

콘솔 API는 한 가지 의미로 작동하지만 사용자가 (예 :) 파일을 열면 새 콘솔 스트림이 열립니다. IMO에서 Console API는 응용 프로그램이 비 대화식 표준 입력에서 읽는 것이 의미가 없거나 위험 할 때만 사용해야합니다. –

+0

새로운 콘솔 스트림을 열려고하지 않았습니다. 난 당신이 콘솔에 연결되어 있는지 확인하기 위해 System.console()에서 null이 아닌 반환을 확인할 수 있다고 생각했습니다. –

-2

당신이 상호 작용 할 수 있습니다 :

public static void main(String args[]) throws Exception { 
    String action = null; 
    Scanner in = new Scanner(System.in); 

    while (!((action = in.nextLine()).equalsIgnoreCase("exit"))) { 
     if (action.equalsIgnoreCase("open")) { 
      openConnections(); 
     } else if (action.equalsIgnoreCase("close")) { 
      closeConnections(); 
     } 
    } 
} 
+0

죄송합니다.이 답변을 이해할 수 없습니다. 그리고 그것은 두 번 게시 될 것으로 보입니다. –

+0

나는 이것이 질문 된 질문에 대한 대답이라고 생각하지 않는다. OP는 코드가 대화식으로 호출되는지 (콘솔에 stdin/stdout이 첨부되었는지) 알려줍니다. –

관련 문제