2013-01-22 71 views
5

Tôi đã viết chương trình Java tải dữ liệu từ một tệp và tôi đang hiển thị tiến trình tải trên dòng lệnh, bằng cách in thông báo tới màn hình sau mỗi bản ghi n, trông như thế này:hiển thị java thay đổi tiến trình trên dòng lệnh

$> 100 bản ghi được xử lý.

$> đã xử lý 200 bản ghi.

$> 300 bản ghi được xử lý.

$> xử lý 400 bản ghi.

$> 500 bản ghi được xử lý.

...

Tuy nhiên, tôi muốn chỉ in một dòng, và chỉ cập nhật số lượng, ví dụ, do đó sản lượng luôn chỉ trông như thế này:

$> đã xử lý < n> hồ sơ.

Làm thế nào để thực hiện việc này bằng Java và thậm chí có thể thực hiện được không?

+0

có thể trùng lặp của: http://stackoverflow.com/questions/1001335/java-gotoxyx-y-for-console-applications – Andremoniy

Trả lời

5

Nó phụ thuộc vào giao diện điều khiển của bạn, nhưng cách đơn giản nhất là sử dụng ký tự Backspace để di chuyển con trỏ về phía sau, trước mặt các nhân vật gần đây in:

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); 
} 

này hoạt động trên cửa sổ dòng lệnh, nhưng ví dụ nó không hoạt động trên bàn điều khiển Eclipse.

Bạn nên thêm một số logic bổ sung để đếm số ký tự được in và không mã hóa tất cả các ký tự "\ b" này, nhưng tính số phải tùy thuộc vào đầu ra gần đây.

Như @Reza cho thấy, việc sử dụng "\ r" thậm chí còn dễ dàng hơn:

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

Nó vẫn không hoạt động trên giao diện điều khiển Eclipse (nhưng là có thể đọc được nhiều hơn so với phương pháp backspace), nhưng tránh việc xử lý tất cả các ký tự backspace. Nếu in một dòng ngắn hơn trước, có thể cần in thêm một số dấu cách để xóa các ký tự dấu sau.

+1

Andreas - Tôi đang in đến Terminal trên Ubuntu của tôi và nó hoạt động như một sự quyến rũ. Cảm ơn bạn. – AHL

+0

BTW: Liên kết mà @Reza đã đăng đề xuất sử dụng "\ r" để đi đến đầu dòng, điều này thậm chí có thể dễ dàng hơn - bạn chỉ cần in lại toàn bộ dòng sau đó. –

+0

giây hoạt động như một nét duyên dáng – Mohsen

1

Bạn cần tìm cách quay lại phần đầu của một dòng và ghi đè lên những gì đã được xuất trên bảng điều khiển. Câu hỏi này đã được giải quyết ở đây:

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

+0

Tôi đã thử cách tiếp cận mà bạn đang đề cập đến, và nó cũng hoạt động. Tôi có thể đánh dấu hai câu hỏi là chính xác không? Nếu tôi đánh dấu câu trả lời này, câu trả lời trên sẽ không được trả lời. – AHL

+0

@AHL Theo như tôi biết, chỉ có một câu trả lời có thể được "chấp nhận". Vui lòng xem tại đây: [http://meta.stackexchange.com/questions/40200/can-i-accept-two-answers](http://meta.stackexchange.com/questions/40200/can-i-accept-hai-câu trả lời) – RGO

Các vấn đề liên quan