From 6d39a0b71e1454bf316b5a261b0084ae4f299123 Mon Sep 17 00:00:00 2001 From: Kevin Jackson Date: Tue, 12 Dec 2006 13:57:36 +0000 Subject: [PATCH] - add Human Readable file size 'parsing' method git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@486146 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tools/ant/util/StringUtils.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/org/apache/tools/ant/util/StringUtils.java b/src/main/org/apache/tools/ant/util/StringUtils.java index 93f0d8ce7..c71990362 100644 --- a/src/main/org/apache/tools/ant/util/StringUtils.java +++ b/src/main/org/apache/tools/ant/util/StringUtils.java @@ -186,4 +186,43 @@ public final class StringUtils { } return b.toString(); } + + /** + * Takes a human readable size representation eg 10K + * a long value. Doesn't support 1.1K or other rational values. + * @param humanSize + * @return a long value representation + * @throws Exception + * @since Ant 1.7 + */ + public static long parseHumanSizes(String humanSize) throws Exception { + final long KILOBYTE = 1024; + final long MEGABYTE = KILOBYTE * 1024; + final long GIGABYTE = MEGABYTE * 1024; + final long TERABYTE = GIGABYTE * 1024; + final long PETABYTE = TERABYTE * 1024; + String regex = "\\d+[K|M|G|T|P]"; + if(humanSize.matches(regex)) { + char c = humanSize.charAt(humanSize.length()-1); + long value = Long.valueOf(humanSize.substring(0, humanSize.length()-1)).longValue(); + switch (c) { + case 'K': + return value * KILOBYTE; + case 'M': + return value * MEGABYTE; + case 'G': + return value * GIGABYTE; + case 'T': + return value * TERABYTE; + case 'P': + return value * PETABYTE; + default: + return value; + } + } else if(humanSize.matches("\\d+")) { + return Long.parseLong(humanSize); + } else { + throw new Exception("Couldn't parse string: "+humanSize); + } + } }