2013-01-22 2 views
5

파일에서 데이터를로드하는 Java 프로그램을 작성하고 명령 행에서로드가 진행되는 동안 표시되는 모든 n 개의 레코드 다음에 메시지를 화면에 출력하여 표시합니다. 예 :java 표시가 명령 줄에서 진행률이 변경됩니다.

$> 100 개의 레코드가 있습니다.

$> 200 레코드가 처리되었습니다.

$> 300 레코드가 처리되었습니다.

$> 400 레코드가 처리되었습니다.

$> 500 개의 레코드가 처리되었습니다.

... 그러나

, I 출력이 언제나 같이 보이도록, 즉 하나 개의 라인을 인쇄 만 번호를 업데이트하고 싶습니다 :

$> 가공 된 < n> 기록.

Java에서이 작업을 수행하는 방법은 무엇입니까?

+0

가능한 중복의 : http://stackoverflow.com/questions/1001335/java-gotoxyx-y-for-console-applications – Andremoniy

답변

5

는 콘솔에 따라 다르지만 가장 간단한 방법은 최근에 인쇄 된 문자의 앞, 뒤쪽으로 커서를 이동 백 스페이스 문자를 사용하는 것입니다 :이 창 명령 줄에서 작동

int[] step = {100,200,300,400,500}; 
System.out.print("$> processed < "); 
for (int i : step) { 
    System.out.print(i + " > records.\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); 
    Thread.sleep(500); 
} 

하지만, 예를 들어 Eclipse 콘솔에서는 작동하지 않습니다.

인쇄 된 문자 수를 계산하고 이러한 모든 "\ b"문자를 하드 코드하지 않고 최근 출력에 따라 올바른 수를 계산해야합니다.

@Reza는 "\ r에"를 사용하여 알 수 있듯이

도 쉽게 :

int[] step = {100,200,300,400,500}; 
for (int i : step) { 
    System.out.print("$> processed < " + i + " > records.\r"); 
    Thread.sleep(500); 
} 

그것은 여전히 ​​이클립스 콘솔에서 작동하지 않습니다 (그러나 백 스페이스 접근 방식보다 더 많은 읽을 수), 그러나의 처리를 피할 수 모든 백 스페이스 문자. 이전보다 짧은 줄을 인쇄하는 경우 후행 문자를 지우려면 추가 공백을 인쇄해야 할 수 있습니다.

+1

안드레아스 - 나는로 인쇄하고 내 우분투에 터미널 그것이 매력처럼 작동합니다. 고맙습니다. – AHL

+0

BTW : @Reza가 게시 한 링크는 "\ r"을 사용하여 줄의 시작으로 이동하는 것을 제안합니다. 더 쉽게 시작할 수 있습니다. 그러면 전체 줄을 다시 인쇄하기 만하면됩니다. –

+0

초 코드는 매력처럼 작동합니다 – Mohsen

1

줄의 처음으로 돌아가서 이미 콘솔에 출력 된 내용을 덮어 쓰는 방법을 찾아야합니다. 이 질문은 여기에서 해결되었습니다

How can I return to the start of a line in a console?

+0

나는 당신이 말하는 접근 방식을 시도했고, 역시 작동합니다. 두 가지 질문에 정확하게 표시 할 수 있습니까? 이 대답을 틱하면 위의 문장이 unticked가됩니다. – AHL

+0

@AHL 내가 아는 한, 단 하나의 대답 만 "받아 들일 수있다". 여기를 참조하십시오 : [http://meta.stackexchange.com/questions/40200/can-i-accept-two-answers](http://meta.stackexchange.co.kr/questions/40200/can-i-accept-two-answers) – RGO

관련 문제