|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- package com.iformall.utils;
-
- import org.apache.commons.lang3.ArrayUtils;
- import org.apache.commons.lang3.StringUtils;
-
- import java.io.File;
- import java.io.IOException;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.security.CodeSource;
- import java.security.ProtectionDomain;
- import java.util.Collection;
- import java.util.Map;
-
- /**
- * 常见的辅助类
- *
- * @author Stormeye
- * @since 2011-11-08
- */
- public final class DataUtil {
- private DataUtil() {
- }
-
- /**
- * 十进制字节数组转十六进制字符串
- *
- * @param b
- * @return
- */
- public static final String byte2hex(byte[] b) { // 一个字节数,转成16进制字符串
- StringBuilder hs = new StringBuilder(b.length * 2);
- String stmp = "";
- for (int n = 0; n < b.length; n++) {
- // 整数转成十六进制表示
- stmp = Integer.toHexString(b[n] & 0XFF);
- if (stmp.length() == 1)
- hs.append("0").append(stmp);
- else
- hs.append(stmp);
- }
- return hs.toString(); // 转成大写
- }
-
- /**
- * 十六进制字符串转十进制字节数组
- *
- * @param hs
- * @return
- */
- public static final byte[] hex2byte(String hs) {
- byte[] b = hs.getBytes();
- if ((b.length % 2) != 0)
- throw new IllegalArgumentException("长度不是偶数");
- byte[] b2 = new byte[b.length / 2];
- for (int n = 0; n < b.length; n += 2) {
- String item = new String(b, n, 2);
- // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个十进制字节
- b2[n / 2] = (byte) Integer.parseInt(item, 16);
- }
- return b2;
- }
-
- /**
- * 这个方法可以通过与某个类的class文件的相对路径来获取文件或目录的绝对路径。 通常在程序中很难定位某个相对路径,特别是在B/S应用中。
- * 通过这个方法,我们可以根据我们程序自身的类文件的位置来定位某个相对路径。
- * 比如:某个txt文件相对于程序的Test类文件的路径是../../resource/test.txt,
- * 那么使用本方法Path.getFullPathRelateClass("../../resource/test.txt",Test.class)
- * 得到的结果是txt文件的在系统中的绝对路径。
- *
- * @param relatedPath 相对路径
- * @param cls 用来定位的类
- * @return 相对路径所对应的绝对路径
- * @throws IOException 因为本方法将查询文件系统,所以可能抛出IO异常
- */
- public static final String getFullPathRelateClass(String relatedPath, Class<?> cls) {
- String path = null;
- if (relatedPath == null) {
- throw new NullPointerException();
- }
- String clsPath = getPathFromClass(cls);
- File clsFile = new File(clsPath);
- String tempPath = clsFile.getParent() + File.separator + relatedPath;
- File file = new File(tempPath);
- try {
- path = file.getCanonicalPath();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return path;
- }
-
- /**
- * 获取class文件所在绝对路径
- *
- * @param cls
- * @return
- * @throws IOException
- */
- public static final String getPathFromClass(Class<?> cls) {
- String path = null;
- if (cls == null) {
- throw new NullPointerException();
- }
- URL url = getClassLocationURL(cls);
- if (url != null) {
- path = url.getPath();
- if ("jar".equalsIgnoreCase(url.getProtocol())) {
- try {
- path = new URL(path).getPath();
- } catch (MalformedURLException e) {
- }
- int location = path.indexOf("!/");
- if (location != -1) {
- path = path.substring(0, location);
- }
- }
- File file = new File(path);
- try {
- path = file.getCanonicalPath();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return path;
- }
-
- /**
- * 判断对象是否Empty(null或元素为0)<br>
- * 实用于对如下对象做判断:String Collection及其子类 Map及其子类
- *
- * @param pObj 待检查对象
- * @return boolean 返回的布尔值
- */
- public static final boolean isEmpty(Object pObj) {
- if (pObj == null)
- return true;
- if (pObj == "")
- return true;
- if (pObj instanceof String) {
- if (((String) pObj).trim().length() == 0) {
- return true;
- }
- } else if (pObj instanceof Collection<?>) {
- if (((Collection<?>) pObj).size() == 0) {
- return true;
- }
- } else if (pObj instanceof Map<?, ?>) {
- if (((Map<?, ?>) pObj).size() == 0) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * 判断对象是否为NotEmpty(!null或元素>0)<br>
- * 实用于对如下对象做判断:String Collection及其子类 Map及其子类
- *
- * @param pObj 待检查对象
- * @return boolean 返回的布尔值
- */
- public static final boolean isNotEmpty(Object pObj) {
- if (pObj == null)
- return false;
- if (pObj == "")
- return false;
- if (pObj instanceof String) {
- if (((String) pObj).trim().length() == 0) {
- return false;
- }
- } else if (pObj instanceof Collection<?>) {
- if (((Collection<?>) pObj).size() == 0) {
- return false;
- }
- } else if (pObj instanceof Map<?, ?>) {
- if (((Map<?, ?>) pObj).size() == 0) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * JS输出含有\n的特殊处理
- *
- * @param pStr
- * @return
- */
- public static final String replace4JsOutput(String pStr) {
- pStr = pStr.replace("\r\n", "<br/> ");
- pStr = pStr.replace("\t", " ");
- pStr = pStr.replace(" ", " ");
- return pStr;
- }
-
- /**
- * 分别去空格
- *
- * @param paramArray
- * @return
- */
- public static final String[] trim(String[] paramArray) {
- if (ArrayUtils.isEmpty(paramArray)) {
- return paramArray;
- }
- String[] resultArray = new String[paramArray.length];
- for (int i = 0; i < paramArray.length; i++) {
- String param = paramArray[i];
- resultArray[i] = StringUtils.trim(param);
- }
- return resultArray;
- }
-
- /**
- * 获取类的class文件位置的URL
- *
- * @param cls
- * @return
- */
- private static URL getClassLocationURL(final Class<?> cls) {
- if (cls == null)
- throw new IllegalArgumentException("null input: cls");
- URL result = null;
- final String clsAsResource = cls.getName().replace('.', '/').concat(".class");
- final ProtectionDomain pd = cls.getProtectionDomain();
- if (pd != null) {
- final CodeSource cs = pd.getCodeSource();
- if (cs != null)
- result = cs.getLocation();
- if (result != null) {
- if ("file".equals(result.getProtocol())) {
- try {
- if (result.toExternalForm().endsWith(".jar") || result.toExternalForm().endsWith(".zip"))
- result = new URL("jar:".concat(result.toExternalForm()).concat("!/").concat(clsAsResource));
- else if (new File(result.getFile()).isDirectory())
- result = new URL(result, clsAsResource);
- } catch (MalformedURLException ignore) {
- }
- }
- }
- }
- if (result == null) {
- final ClassLoader clsLoader = cls.getClassLoader();
- result = clsLoader != null ? clsLoader.getResource(clsAsResource)
- : ClassLoader.getSystemResource(clsAsResource);
- }
- return result;
- }
-
- /** 初始化设置默认值 */
- public static final <K> K ifNull(K k, K defaultValue) {
- if (k == null) {
- return defaultValue;
- }
- return k;
- }
-
- public static String unicodeToUtf8(String theString) {
- char aChar;
- int len = theString.length();
- StringBuffer outBuffer = new StringBuffer(len);
- for (int x = 0; x < len;) {
- aChar = theString.charAt(x++);
- if (aChar == '\\') {
- aChar = theString.charAt(x++);
- if (aChar == 'u') {
- // Read the xxxx
- int value = 0;
- for (int i = 0; i < 4; i++) {
- aChar = theString.charAt(x++);
- switch (aChar) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- value = (value << 4) + aChar - '0';
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- value = (value << 4) + 10 + aChar - 'a';
- break;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- value = (value << 4) + 10 + aChar - 'A';
- break;
- default:
- throw new IllegalArgumentException(
- "Malformed \\uxxxx encoding.");
- }
- }
- outBuffer.append((char) value);
- } else {
- if (aChar == 't')
- aChar = '\t';
- else if (aChar == 'r')
- aChar = '\r';
- else if (aChar == 'n')
- aChar = '\n';
- else if (aChar == 'f')
- aChar = '\f';
- outBuffer.append(aChar);
- }
- } else
- outBuffer.append(aChar);
- }
- return outBuffer.toString();
- }
- }
|