문제

다음은 간단한 코드입니다.

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 키+, 당신은 무한 루프를 얻을 것입니다 nulls, null을받을 때 루프를 종료하도록 프로그램을 수정하지 않는 한.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top