All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.org.jets3t.service.utils.ByteFormatter Maven / Gradle / Ivy

/*
 * jets3t : Java Extra-Tasty S3 Toolkit (for Amazon S3 online storage service)
 * This is a java.net project, see https://jets3t.dev.java.net/
 * 
 * Copyright 2006 James Murty
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. 
 */
package org.jets3t.service.utils;

import java.text.DecimalFormat;
import java.text.ParseException;

import javax.swing.text.NumberFormatter;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Formats numeric byte values into human-readable strings.
 * 
 * @author James Murty
 */
public class ByteFormatter {
    private static final Log log = LogFactory.getLog(ByteFormatter.class);
    
    private String gigabyteSuffix = null;
    private String megabyteSuffix = null;
    private String kilobyteSuffix = null;
    private String byteSuffix = null;
    private NumberFormatter nf = null; 

    /**
     * Constructs a formatter that will use default text to represent byte amounts.
     * Default values used:
     * 
    *
  • Gigabyte suffix: " GB"
  • *
  • Megabyte suffix: " MB"
  • *
  • Kilobyte suffix: " KB"
  • *
  • Byte suffix: " B"
  • *
  • Precision: 2 decimal places
  • *
* */ public ByteFormatter() { this(" GB", " MB", " KB", " B", 2); } /** * Constructs a formatter that will use the given values when formatting byte values. * * @param gigabyteSuffix * string to display at the end of gigabyte values. * @param megabyteSuffix * string to display at the end of megabyte values. * @param kilobyteSuffix * string to display at the end of kilobyte values. * @param byteSuffix * string to display at the end of byte values. * @param decimalPlaces * the number of decimal places to use when converting byte amounts into kilo, mega or giga * byte values. */ public ByteFormatter(String gigabyteSuffix, String megabyteSuffix, String kilobyteSuffix, String byteSuffix, int decimalPlaces) { this.gigabyteSuffix = gigabyteSuffix; this.megabyteSuffix = megabyteSuffix; this.kilobyteSuffix = kilobyteSuffix; this.byteSuffix = byteSuffix; StringBuffer numberFormatString = new StringBuffer(); numberFormatString.append("0").append((decimalPlaces > 0? "." : "")); for (int i = 0; i < decimalPlaces; i++) { numberFormatString.append("0"); } nf = new NumberFormatter(new DecimalFormat(numberFormatString.toString())); } /** * Converts a byte size into a human-readable string, such as "1.43 MB" or "27 KB". * The values used are based on powers of 1024, ie 1 KB = 1024 bytes, not 1000 bytes. * * @param byteSize * the byte size of some item * @return * a human-readable description of the byte size */ public String formatByteSize(long byteSize) { String result = null; try { if (byteSize > Math.pow(1024,3)) { // Report gigabytes result = nf.valueToString(new Double(byteSize / Math.pow(1024,3))) + gigabyteSuffix; } else if (byteSize > Math.pow(1024,2)) { // Report megabytes result = nf.valueToString(new Double(byteSize / Math.pow(1024,2))) + megabyteSuffix; } else if (byteSize > 1024) { // Report kilobytes result = nf.valueToString(new Double(byteSize / Math.pow(1024,1))) + kilobyteSuffix; } else if (byteSize >= 0) { // Report bytes result = byteSize + byteSuffix; } } catch (ParseException e) { if (log.isErrorEnabled()) { log.error("Unable to format byte size " + byteSize, e); } return byteSize + byteSuffix; } return result; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy