[Thinking in Java] - No.11 Java控制台进度条

2024-04-12 14:32

本文主要是介绍[Thinking in Java] - No.11 Java控制台进度条,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

java实现控制台的进度条,其实就是将之前每一行打印的进度条,反复的打印在同一行上,实现视觉上的进度条增长的效果。

package com.ccd.ym.util;import java.text.DecimalFormat;public class ConsoleProgressBar {private long minimum = 0; // 进度条起始值private long maximum = 100; // 进度条最大值private long barLen = 100; // 进度条长度private char showChar = '='; // 用于进度条显示的字符private DecimalFormat formater = new DecimalFormat("#.##%");/*** 使用系统标准输出,显示字符进度条及其百分比。*/public ConsoleProgressBar() {}/*** 使用系统标准输出,显示字符进度条及其百分比。** @param minimum 进度条起始值* @param maximum 进度条最大值* @param barLen 进度条长度*/public ConsoleProgressBar(long minimum, long maximum,long barLen) {this(minimum, maximum, barLen, '=');}/*** 使用系统标准输出,显示字符进度条及其百分比。** @param minimum 进度条起始值* @param maximum 进度条最大值* @param barLen 进度条长度* @param showChar 用于进度条显示的字符*/public ConsoleProgressBar(long minimum, long maximum,long barLen, char showChar) {this.minimum = minimum;this.maximum = maximum;this.barLen = barLen;this.showChar = showChar;}/*** 显示进度条。** @param value 当前进度。进度必须大于或等于起始点且小于等于结束点(start <= current <= end)。*/public void show(long value) {if (value < minimum || value > maximum) {return;}reset();minimum = value;float rate = (float) (minimum*1.0 / maximum);long len = (long) (rate * barLen);draw(len, rate);if (minimum == maximum) {afterComplete();}}private void draw(long len, float rate) {System.out.print("Progress: ");for (int i = 0; i < len; i++) {System.out.print(showChar);}System.out.print(' ');System.out.print(format(rate));}private void reset() {System.out.print('\r'); //光标移动到行首} private void afterComplete() {System.out.print('\n');}private String format(float num) {return formater.format(num);}//    public static void main(String[] args) throws InterruptedException {
//        ConsoleProgressBar cpb = new ConsoleProgressBar(0, 100, 30, '#');
//        for (int i = 1; i <= 100; i++) {
//            cpb.show(i);
//            Thread.sleep(100);
//        }
//    }}

代码很简单,但是存在的问题是,遇到程序打印的log会换行,效果如下:
这里写图片描述

这篇关于[Thinking in Java] - No.11 Java控制台进度条的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897399

相关文章

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException