聞こえないJavaエンジニアが適当に書き連ねていく

つらつらとメモしたり日頃の溜まっている想いを吐き出す場所です。

Javaでファイルサイズを適切な単位付きの文字列に変換する方法

これは何

abachibi.hatenablog.com このサイトのJavaバージョンでかなりシンプルに書けて目から鱗だったので。

ソース

Javaのバージョンは関係ないと思うけど、一応Java11で動かしてます。

本体

public static String convertToFileSize(final long fileSize) {

    double tempFileSize = fileSize;

    String[] units = {" B", " KB", " MB", " GB", " TB"};
    int counter = 0;
    for (; tempFileSize > 1024; counter++) {
        tempFileSize = tempFileSize / 1024;
    }

    BigDecimal bd = new BigDecimal(tempFileSize);
    BigDecimal bd2 = bd.setScale(2, RoundingMode.HALF_UP);

    return bd2.stripTrailingZeros() + units[counter];
}

一応テストコード

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class FileUtilsTest {

    @Test
    void testB() {
        String a = FileUtils.convertToFileSize(1024L);
        assertEquals("1024 B", a);
    }

    @Test
    void testKb() {
        String a = FileUtils.convertToFileSize(1000000L);
        assertEquals("976.56 KB", a);
    }

    @Test
    void testMb() {
        String a = FileUtils.convertToFileSize(2197152L);
        assertEquals("2.1 MB", a);
    }

}