[java] 자바에서 Jansi를 사용하여 터미널 창에서 프로그레스 바 표시하기

이 예제에서는 Jansi 라이브러리를 사용하여 자바에서 터미널 창에 프로그레스 바를 표시하는 방법을 살펴보겠습니다. Jansi는 터미널 창에서 ANSI 이스케이프 시퀀스를 사용하여 텍스트 색상, 배경 색상 및 커서 위치 등을 제어할 수 있게 해주는 라이브러리입니다.

Jansi 라이브러리 추가하기

먼저 Maven 또는 Gradle을 사용하여 Jansi 라이브러리를 추가해야 합니다. 아래의 Maven 및 Gradle 의존성 설정을 참고하세요.

Maven 의존성 설정

<dependency>
    <groupId>org.fusesource.jansi</groupId>
    <artifactId>jansi</artifactId>
    <version>1.18</version>
</dependency>

Gradle 의존성 설정

dependencies {
    implementation 'org.fusesource.jansi:jansi:1.18'
}

의존성을 추가한 후 프로젝트를 다시 빌드하십시오.

프로그레스 바 표시하기

이제 자바 코드에서 Jansi를 사용하여 터미널 창에 프로그레스 바를 표시해보겠습니다. 아래의 예제 코드를 참고하세요.

import org.fusesource.jansi.AnsiConsole;

public class ProgressBarExample {

    public static void main(String[] args) {
        AnsiConsole.systemInstall();

        int totalSteps = 10;
        for (int i = 0; i <= totalSteps; i++) {
            printProgressBar(i, totalSteps);
            // 잠시 대기
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        AnsiConsole.systemUninstall();
    }

    private static void printProgressBar(int currentStep, int totalSteps) {
        StringBuilder progressBar = new StringBuilder();
        int progressWidth = 50;
        int filledWidth = (int) (((double) currentStep / totalSteps) * progressWidth);

        progressBar.append("[");
        for (int i = 0; i < progressWidth; i++) {
            if (i < filledWidth) {
                progressBar.append("=");
            } else if (i == filledWidth) {
                progressBar.append(">");
            } else {
                progressBar.append(" ");
            }
        }
        progressBar.append("] ");

        double progressPercentage = ((double) currentStep / totalSteps) * 100;
        String progressText = String.format("%.2f%%", progressPercentage);
        progressBar.append(progressText);

        // Clear console
        System.out.print("\033[H\033[2J");
        System.out.flush();
        
        // Print progress bar
        System.out.print(progressBar.toString());
    }
}

위의 예제 코드에서는 “org.fusesource.jansi.AnsiConsole”을 import 하고 AnsiConsole.systemInstall()AnsiConsole.systemUninstall()로 Jansi를 초기화 및 정리하는 작업을 수행합니다.

printProgressBar 메소드는 현재 단계와 총 단계를 인수로 받아서 프로그레스 바를 생성하는 역할을 합니다. currentSteptotalSteps를 이용하여 프로그레스 바의 너비를 계산하고, 현재 단계의 백분율을 계산하여 출력합니다.

프로그레스 바를 표시하려면 System.out.print("\033[H\033[2J") 코드로 콘솔을 지우고, System.out.flush()를 호출하여 버퍼를 비워야 합니다. 그런 다음 System.out.print(progressBar.toString())로 프로그레스 바를 출력합니다.

프로그레스 바와 함께 Thread.sleep(500)을 사용하여 각 단계 사이에 잠시 대기하도록 설정했습니다.

실행 결과

위의 예제 코드를 실행하면 터미널 창에 프로그레스 바가 표시됩니다. 단계가 증가함에 따라 바가 차오르는 것을 확인할 수 있습니다.

결론

이 예제에서는 Jansi 라이브러리를 사용하여 자바에서 터미널 창에서 프로그레스 바를 표시하는 방법을 알아보았습니다. Jansi를 사용하면 ANSI 이스케이프 시퀀스를 통해 터미널 창을 조작할 수 있으므로 텍스트 스타일링 및 터미널 UI 개발에 유용합니다.