Java의 명령 줄 파이프 입력
-
07-07-2019 - |
문제
다음은 간단한 코드입니다.
import java.io.*;
public class Read {
public static void main(String[] args) {
BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String x = null;
try{
x = f.readLine();
}
catch (IOException e) {e.printStackTrace();}
System.out.println(x);
}
}
}
java read <input.txt
input.txt가 프로그램에 완전히 파이프가되면 X는 무한 널을 계속 얻습니다. 왜 이렇게이다? 코드에 공급 된 파일이 수행 된 후 표준 (명령 줄)을 활성화 할 수있는 방법이 있습니까? 스트림을 닫고 재개를 시도했지만 작동하지 않습니다. 재설정 등.
해결책
실행함으로써 "java Read < input.txt"
운영 체제 에이 프로세스의 경우 파이프 파일이 ~이다 표준 in. 그런 다음 응용 프로그램 내부에서 명령 줄로 다시 전환 할 수 없습니다.
그렇게하려면 input.txt를 응용 프로그램에 파일 이름 매개 변수로 전달하고 응용 프로그램 내부에서 파일을 열/읽기/닫은 다음 표준 입력에서 읽으십시오.
다른 팁
글쎄, 이것은 a에서 읽는 데 전형적입니다 BufferedReader
. readLine()
보고 null
스트림 끝이 맞을 때. 아마도 당신의 무한 루프는 문제 일 것입니다 ;-)
// try / catch ommitted
String x = null;
while( (x = f.readLine()) != null )
{
System.out.println(x);
}
다음과 같이 라인이 널이면 while 루프를 종료해야합니다.
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
catch (IOException e) {
logger.error("IOException reading System.in", e);
throw e;
}
finally {
if (in != null) {
in.close();
}
}
코드에 공급 된 파일이 수행 된 후 표준 (명령 줄)을 활성화 할 수있는 방법이 있습니까?
오래된 질문을 부딪쳐서 죄송하지만 지금까지 답은 거기에있는 것을 지적하지 않습니다. ~이다 파일에 배관 후 콘솔 입력으로 다시 전달하는 (쉘 전용) 방법.
명령을 실행하는 경우
{ cat input.txt & cat; } | java Read
그런 다음 텍스트 input.txt
전달됩니다 java Read
그런 다음 콘솔 입력으로 다시 삭제됩니다.
그런 다음 누르면 누릅니다 Ctrl 키+디, 당신은 무한 루프를 얻을 것입니다 null
s, null을받을 때 루프를 종료하도록 프로그램을 수정하지 않는 한.