2011-03-09

Formattare la dimensione di un file in Java

Cercando un sistema per visualizzare in Java la dimensione di un file in modo facilmente leggibile mi sono imbattuto in questo posto:
formatting - How to convert byte size into human readable format in java?
dal sito Stack Overflow
La soluzione proposta più votata mi ha colpito per l'eleganza, la riporto in tutto il suo splendore:


public static String humanReadableByteCount(long bytes, boolean si) {
    int unit = si ? 1000 : 1024;
    if (bytes < unit) return bytes + " B";
    int exp = (int) (Math.log(bytes) / Math.log(unit));
    String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
    return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
}
L'ho subito utilizzata con successo e soddisfazione. L'eleganza che mi ha colpito è l'utilizzo dei logaritmi per calcolare "secco" l'indice della lettera da utilizzare. Inoltre è comodo il secondo parametro da passare al metodo per selezionare il sistema di unità da utilizzare per passare dai prefissi multipli del Sistema internazionale a quelli binari, passando false al parametro si si ottengono i valori in multipli di 1024 altrimenti in multipli di 1000. Qualche esempio di risultati:
            0:        0 B        0 B
           27:       27 B       27 B
       110592:   110.6 KB  108.0 KiB
    452984832:   453.0 MB  432.0 MiB
1855425871872:     1.9 TB    1.7 TiB

Nessun commento:

Posta un commento