Ich habe ein Java-Programm, das im Befehlszeilenmodus ausgeführt wird. Ich möchte einen Fortschrittsbalken anzeigen, der den Prozentsatz der geleisteten Arbeit anzeigt. Dieselbe Art von Fortschrittsbalken, die Sie mit wget unter Unix sehen würden. Ist das möglich?
java
command-line
progress-bar
g andrieu
quelle
quelle
Antworten:
Ich habe so etwas schon einmal implementiert. Es geht nicht so sehr um Java, sondern darum, welche Zeichen an die Konsole gesendet werden sollen.
Der Schlüssel ist der Unterschied zwischen
\n
und\r
.\n
geht zum Anfang einer neuen Zeile. Ist\r
aber nur Wagenrücklauf - es geht zurück zum Anfang der gleichen Zeile.Sie müssen also Ihren Fortschrittsbalken drucken, indem Sie beispielsweise die Zeichenfolge drucken
Überschreiben Sie beim nächsten Häkchen des Fortschrittsbalkens dieselbe Zeile mit einem längeren Balken. (Da wir \ r verwenden, bleiben wir in derselben Zeile.) Zum Beispiel:
Was Sie beachten müssen, ist, wenn Sie fertig sind, wenn Sie dann nur drucken
Möglicherweise haben Sie noch Müll aus dem Fortschrittsbalken in der Zeile. Wenn Sie mit dem Fortschrittsbalken fertig sind, müssen Sie genügend Leerzeichen drucken, um ihn aus der Zeile zu entfernen. Sowie:
Hoffentlich hilft das.
quelle
Es gibt https://github.com/ctongfei/progressbar , Lizenz: MIT
Einfache Konsolen-Fortschrittsanzeige. Das Schreiben des Fortschrittsbalkens wird jetzt in einem anderen Thread ausgeführt.
Für optimale visuelle Effekte werden Menlo, Fira Mono, Source Code Pro oder SF Mono empfohlen.
Verwenden Sie für Consolas- oder Andale Mono-Schriftarten
ProgressBarStyle.ASCII
(siehe unten), da die Glyphen zum Zeichnen von Kästchen in diesen Schriftarten nicht richtig ausgerichtet sind.Maven:
Verwendung:
quelle
step()
Anrufen) läuft ? Läuft Ihre Bibliothek asynchron, sodass die Uhr aktualisiert werden kann? Was ist, wenn meine Bibliothek tagelang läuft? Verwendet es die/r
Strategie? Wird dies zu einer Ausgabe von mehreren hundert Megabyte führen?Ich habe festgestellt, dass der folgende Code korrekt funktioniert. Es schreibt Bytes in den Ausgabepuffer. Möglicherweise ersetzt diese Methode, die einen Writer wie die
System.out.println()
Methode verwendet, das Vorkommen von\r
to\n
, um mit dem nativen Zeilenende des Ziels übereinzustimmen (falls nicht richtig konfiguriert).quelle
Ich habe einen prozentualen Fortschritt gemacht, um die verbleibende Download-Datei zu überprüfen.
Ich rufe die Methode regelmäßig in meinem Dateidownload auf, um die gesamte Dateigröße und die verbleibende zu überprüfen und diese in zu präsentieren
%
.Es kann auch für andere Aufgaben verwendet werden.
Test- und Ausgabebeispiel
Test mit for-Schleife
Die Methode kann leicht geändert werden:
quelle
C # Beispiel, aber ich gehe davon aus, dass dies
System.out.print
in Java dasselbe ist . Fühlen Sie sich frei, mich zu korrigieren, wenn ich falsch liege.Grundsätzlich möchten Sie das
\r
Escape-Zeichen an den Anfang Ihrer Nachricht schreiben, wodurch der Cursor zum Zeilenanfang (Zeilenvorschub) zurückkehrt, ohne zur nächsten Zeile zu wechseln.quelle
Ein bisschen überarbeitet und aktualisiert @ maytham-ɯɐɥʇʎɐɯ 's Methode. Jetzt unterstützt es eine beliebige Größe des Fortschrittsbalkens:
quelle
Hier ist eine modifizierte Version des oben genannten:
... und hauptsächlich:
quelle
Dies wäre mit einer Java Curses-Bibliothek möglich. Das habe ich gefunden. Ich habe es selbst nicht benutzt und weiß nicht, ob es plattformübergreifend ist.
quelle
Ich verwende einen "springenden" Fortschrittsbalken, wenn ich ein Werkzeug verzögern muss, um eine Rennbedingung zu verhindern.
quelle
Ich hatte kürzlich das gleiche Problem. Sie können meinen Code überprüfen: Ich habe ihn auf 5% gesetzt, was Sie später ändern können.
quelle
quelle
Ich habe den Code von Eoin Campbell in Java bearbeitet und den formatierten Fortschritt in Prozent hinzugefügt.
Und Ausgabe:
quelle
quelle
quelle
Geben Sie hier die Bildbeschreibung ein
quelle