Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format String into KB, MB and GB

Tags:

string

android

Below is the class which returns me data counter value in String. I was wanted to format String into KB, MB, and GB

public class MainActivity extends Activity {

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView infoView = (TextView)findViewById(R.id.traffic_info);
        String info = "";

        long getmobilerxbytes = TrafficStats.getMobileRxBytes();
        long getmobilerxpackets = TrafficStats.getMobileRxPackets();
        long getmobiletxbytes = TrafficStats.getMobileTxBytes();
        long getmobiletxpackets = TrafficStats.getMobileTxPackets();

        long totalrxbytes = TrafficStats.getTotalRxBytes();
        long totalrxpackets = TrafficStats.getTotalRxPackets(); 
        long totaltxbytes = TrafficStats.getTotalTxBytes(); 
        long totaltxpackets = TrafficStats.getTotalTxPackets();

        info += "Mobile Interface:\n";
        info += ("\tReceived: " + getmobilerxbytes + " bytes / " + getmobilerxpackets + " packets\n");
        info += ("\tTransmitted: " + getmobiletxbytes + " bytes / " + getmobiletxpackets + " packets\n");

        info += "All Network Interface:\n";
        info += ("\tReceived: " + totalrxbytes + " bytes / " + totalrxpackets + " packets\n");
        info += ("\tTransmitted: " + totaltxbytes + " bytes / " + totaltxpackets + " packets\n");

        infoView.setText(info);

}

Here is beautiful method to do that :

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);
    }

But I am not sure how can i use above method in my onCreate code

Thanks in advance

like image 236
user45678 Avatar asked Aug 07 '13 09:08

user45678


People also ask

How to convert file size from bytes to KB to MB?

For the better usability, the required code is grouped into the formatFileSize () function. The formatFileSize () function converts the size from bytes to KB, MB, GB, TB, PB, EB, ZB, YB using Javascript.

Which method returns the size of a file in bytes?

C# FileInfo.Length returns the size of a file in bytes. This method coverts file size in bytes into KB, MB, GB, TB, or PB.

How to convert the size of a file to KB using JavaScript?

For the better usability, the required code is grouped into the formatFileSize () function. The formatFileSize () function converts the size from bytes to KB, MB, GB, TB, PB, EB, ZB, YB using Javascript. The formatFileSize () function accepts the following parametters.

How to get the next byte in size of a file?

Each 1024 bytes is the next byte in size. Please make sure to change the file name to your own file. In the above code, FileInfo.Length returns the size of a file in number of bytes. FormatSize method divides total bytes by x1024 and finds the next abbreviation from the array.


2 Answers

Call the method by passing the bytes . Add the String which is returned after doing the calculations to the TextView.

public static String getFileSize(long size) {
    if (size <= 0)
        return "0";

    final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
    int digitGroups = (int) (Math.log10(size) / Math.log10(1024));

    return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
like image 108
chiranjib Avatar answered Oct 01 '22 03:10

chiranjib


Just use some mathematical formula shown below where you need:

if(bytes < 1024)
    return bytes + " bytes";

bytes /= 1024;
if(bytes < 1024)
    return bytes + " KB";

bytes /= 1024;
if(bytes < 1024)
    return bytes + " MB";

bytes /= 1024;
if(bytes < 1024)
    return bytes + " GB";

return String(bytes);

and to pass it to function

humanReadableByteCount(bytes,true);

where bytes equals TrafficStats.getTotalTxBytes()

Hope it helps. I found some link on stack too link1 and link2

like image 22
surhidamatya Avatar answered Oct 01 '22 01:10

surhidamatya