package com.nbclass.util; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; import java.security.SecureRandom; import java.sql.PreparedStatement; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Random; import java.util.UUID; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.UnixCrypt; import org.apache.commons.lang3.StringUtils; /** * 工具类 * @author leiyun * @datetime 2016年3月18日 上午10:30:43 */ public class Utility implements java.io.Serializable { private static final long serialVersionUID = 1L; protected static Utility instance = null; public static synchronized void setInstance(boolean clear) { if (clear) instance = null; else if (instance == null) instance = new Utility(); } public static Utility getUtilityInstance() { if (instance == null) setInstance(false); return instance; } protected Utility() { instance = null; } /** * Convert integer string array into integer array * @param array * @return * @throws Exception */ public static int[] toIntArray(String[] array) { int[] result = new int[array.length]; int count = 0; for (int i = 0; i < array.length; i++) { if (array[i] != null && !array[i].trim().equals("") && !array[i].trim().equals("undefined")) result[count++] = Integer.parseInt(array[i]); } return result; } /** * Convert integer arraylist into integer array * @param array * @return * @throws Exception */ public static int[] toIntArray(ArrayList array) throws Exception { int[] result = new int[array.size()]; int count = 0; for (int i = 0; i < array.size(); i++) { String item = array.get(i); if (item != null && !item.trim().equals("")) result[count++] = Integer.parseInt(item); } return result; } public static int[] toIntArray(String str){ if(str == null || str.equals("")) return null; int[] result; if(str.indexOf(",")!=-1){ String[] strArr = str.split(","); result =toIntArray(strArr); }else{ result = new int[]{Integer.parseInt(str)}; } return result; } public static String strArrayToString(String[] ids){ if(ids == null || ids.length < 1) return null; String result = ""; for(int i=0; i< ids.length; i++){ result += (isEmpty(result) ? "" : ",") + ids[i]; } return result; } public static String encodeHTML(String value) { if (value == null) return ""; value = value.replaceAll("\"", """).replaceAll("'", "'"); value = value.replaceAll("<", "<").replaceAll(">", ">"); return value; } public static String decodeHTML(String value) { if (value == null) return ""; value = value.replaceAll(""", "\"").replaceAll("'", "'"); value = value.replaceAll("<", "<").replaceAll(">", ">"); return value; } /** * This function will convert the string to a unicode string. (e.g. "\u7f51") * * @param value * @return */ public static String toUnicodeString(String value) throws Exception { // Set the contant type as "UTF8". // if (value == null || value.equals("")) return value; String buffer = value; buffer = new String(buffer.getBytes("ISO8859_1"), "UTF8"); buffer = URLEncoder.encode(buffer, "Unicode"); StringBuffer sb = new StringBuffer(); String[] sc = buffer.split("%FF%FE"); // for each of unicode set for (int i = 0; i < sc.length; i++) { String si = sc[i]; // for each of char in unicode line for (int j = 0; j < si.length(); j++) { char ch = si.charAt(j); if (ch == '%') { sb.append('\\').append('u'); sb.append(si.substring(j + 4, j + 6).toLowerCase()); sb.append(si.substring(j + 1, j + 3).toLowerCase()); j += 5; } else { String ss = si.substring(j, j + 1); if (ss.equals("+")) ss = " "; sb.append(ss); } } } return sb.toString(); } /** * Create a instance from a class * * @param service * @return @throws * ClassNotFoundException * @throws InstantiationException * @throws IllegalAccessException */ public static Object instantiate(String service) throws ClassNotFoundException, InstantiationException, IllegalAccessException { ClassLoader classloader = Thread.currentThread().getContextClassLoader(); Class instance = classloader.loadClass(service); return instance.newInstance(); } public static double getRoundUp(double d, int scale) { double result = d; BigDecimal bd = new BigDecimal(d); result = bd.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); return result; } public static float getRoundUp(float d, int scale) { float result = d; BigDecimal bd = new BigDecimal(d); result = bd.setScale(scale, BigDecimal.ROUND_HALF_UP).floatValue(); return result; } public static Calendar getCalendar(Date date) throws Exception { Calendar result = Calendar.getInstance(); result.setTime(date); return result; } public static Calendar getCalendar(long milliseconds) throws Exception { Calendar result = Calendar.getInstance(); result.setTimeInMillis(milliseconds); return result; } public static String getTimeStampWithMillis() { return getTimeStampWithMillis(Calendar.getInstance()); } public static String getTimeStampWithMillis(Calendar calendar) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String result = sdf.format(calendar.getTime()); return result; } /** * Convert a string with format "yyyyMMddHHmmss" into Calendar object * @param date * @return * @throws Exception */ public static Calendar getCalendar(String date) throws Exception { if (date == null || date.trim().equals("")) return null; for (int i = date.length(); i < 14; i++) date += "0"; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); Calendar result = Calendar.getInstance(); try { result.setTime(sdf.parse(date)); } catch (ParseException e) { result = null; } return result; } public static Calendar getCalendar(String date, String format) throws Exception { if (date == null || date.trim().equals("")) return null; SimpleDateFormat sdf = new SimpleDateFormat(format); Calendar result = Calendar.getInstance(); try { result.setTime(sdf.parse(date)); } catch (ParseException e) { result = null; } return result; } public static String getDateString(Calendar date){ return getDateString(date, "yyyyMMddHHmmss"); } public static String getDateString(Calendar date, String format){ if (date == null) return ""; SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date.getTime()); } public static String getHttpContent(String urlStr, String encoding) throws Exception { URL url = new URL(urlStr); InputStream is = null; HttpURLConnection connection = (HttpURLConnection) url.openConnection(); try { if (connection.getResponseCode() != 200) { //return "Error: " + connection.getResponseCode() + " " + connection.getResponseMessage(); is = connection.getErrorStream(); } else { is = connection.getInputStream(); } ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[16384]; int count; while ((count = is.read(buffer)) != -1) { bos.write(buffer, 0, count); } return bos.toString(encoding); } finally { connection.disconnect(); } } public static byte[] objectToByteArray(Object obj) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(obj); oos.flush(); oos.close(); return bos.toByteArray(); } public static byte[] InputStreamToByteArray(InputStream is) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[16384]; int count; while ((count = is.read(buffer)) != -1) { bos.write(buffer, 0, count); } return bos.toByteArray(); } public static Object byteArrayToObject(byte[] array) throws Exception { ByteArrayInputStream bis = new ByteArrayInputStream(array); ObjectInputStream ois = new ObjectInputStream(bis); return ois.readObject(); } public static void byteArrayToFile(byte[] content, String filename) throws Exception { FileOutputStream out = new FileOutputStream(filename); out.write(content); out.flush(); out.close(); } public static byte[] fileToByteArray(String filename) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); FileInputStream fos = new FileInputStream(filename); byte[] buffer = new byte[10240]; int count; while ((count = fos.read(buffer)) != -1) bos.write(buffer, 0, count); fos.close(); return bos.toByteArray(); } public static int[] getIntegerArray(String values) throws Exception { String[] slice = values.split(","); int[] result = new int[slice.length]; for (int i = 0; i < slice.length; i++) result[i] = Integer.parseInt(slice[i]); return result; } public static String getFormatedDate(Calendar date) { return getFormatedDate(date, "yyyy-MM-dd HH:mm:ss"); } public static String getFormatedDate(Calendar date, String format) { if (date == null) return ""; SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date.getTime()); } public static String getFormatedTimeStamp() { return getFormatedTimeStamp(Calendar.getInstance()); } public static String getFormatedTimeStamp(Calendar calendar) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); return sdf.format(calendar.getTime()); } public static String getTimeStamp() { Calendar calendar = Calendar.getInstance(); return getTimeStamp(calendar); } public static String getTimeStamp(Calendar calendar) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String result = sdf.format(calendar.getTime()); result = result + "000"; return result; } public static String getFormatedFileSize(long value) { double kb = value / 1024.00; DecimalFormat df = new DecimalFormat("#0.00"); return df.format(kb); } public static String getFormatedDecimal(double value) { return getFormatedDecimal(value, "#0.00"); } public static String getFormatedDecimal(double value, int decimal) { String format = "#0."; if (decimal == 0) format = "#0"; else { for (int i = 1; i <= decimal; i++) format += "0"; } return getFormatedDecimal(value, format); } public static String getFormatedDecimal(double value, String format) { DecimalFormat df = new DecimalFormat(format); return df.format(value); } public static Date getMonthLastDay(int year, int month) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month, 1); calendar.add(Calendar.DATE, -1); return calendar.getTime(); } public static String getDateFormat(Date date, String format) { if (date == null) return ""; SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.US); return dateFormat.format(date); } public static java.sql.Date UtilDateToSQLDate(Date utilDate) { if (utilDate == null) return null; return new java.sql.Date(utilDate.getTime()); } public static java.sql.Timestamp UtilDateToSQLTimeStamp(Date utilDate) { if (utilDate == null) return null; return new java.sql.Timestamp(utilDate.getTime()); } public static java.util.Date SQLDateToUtilDate(java.sql.Date SQLDate) { if (SQLDate == null) return null; return new Date(SQLDate.getTime()); } public static java.util.Date SQLDateToUtilDate(java.sql.Timestamp SQLDate) { if (SQLDate == null) return null; return new Date(SQLDate.getTime()); } public static Date parseDate(String strDate, String pattern) throws Exception { if (strDate == null || strDate.trim().equals("")) return null; SimpleDateFormat format = new SimpleDateFormat(pattern); Date date = format.parse(strDate); return date; } public static String getSearchFormat(String pattern) { if (pattern == null) return "%"; pattern = pattern.trim(); // format maybe : A, A%, %A%, A%B%, %A"B if (pattern.equals("")) { pattern = "%"; } else if (pattern.indexOf("%") == -1) { pattern = "%" + pattern + "%"; } return pattern; } public static String getLeadingZero(int intValue, int maxLength) { String result = String.valueOf(intValue); if (result.length() < maxLength) { while (result.length() < maxLength) { result = "0" + result; } } return result; } public static String getQuantityAsString(float qty) { DecimalFormat df = new DecimalFormat("#0.00"); return df.format(qty); } public static String getQuantityAsString(double qty) { DecimalFormat df = new DecimalFormat("#0.00"); return df.format(qty); } public static String getQuantityAsString(float amt, String pattern) { DecimalFormat df = new DecimalFormat(pattern); return df.format(amt); } public static String getQuantityAsString(double amt, String pattern) { DecimalFormat df = new DecimalFormat(pattern); return df.format(amt); } public static String getInvoiceAsString(float amt) { DecimalFormat df = new DecimalFormat("#,##0.00"); return df.format(amt); } public static String getAmountAsString(float amt, String pattern) { DecimalFormat df = new DecimalFormat(pattern); return df.format(amt); } public static String getAmountAsString(double amt, String pattern) { DecimalFormat df = new DecimalFormat(pattern); return df.format(amt); } public static String getFloatFormat(float f, String pattern) { DecimalFormat df = new DecimalFormat(pattern); return df.format(f); } public static String getDoubleFormat(double d, String pattern) { DecimalFormat df = new DecimalFormat(pattern); return df.format(d); } public static Date parseExcelDate(String Date) { Calendar calendar = Calendar.getInstance(); long millis = (long) (Integer.parseInt(Date) - 25569)*24*60*60*1000; calendar.setTimeInMillis(millis); return calendar.getTime(); } public static double mul(double d1, double d2) { BigDecimal b1 = new BigDecimal(String.valueOf(d1)); BigDecimal b2 = new BigDecimal(String.valueOf(d2)); return b1.multiply(b2).doubleValue(); } public static double mul(BigDecimal b1, double d2) { BigDecimal b2 = new BigDecimal(String.valueOf(d2)); return b1.multiply(b2).doubleValue(); } public static double add(double d1, double d2) { BigDecimal b1 = new BigDecimal(String.valueOf(d1)); BigDecimal b2 = new BigDecimal(String.valueOf(d2)); return b1.add(b2).doubleValue(); } public static boolean isPositiveInteger(String inValue) { return isNumericValue(inValue, false, false); } public static boolean isNumericValue(String inValue) { return isNumericValue(inValue, true, true); } public static boolean isNumericValue(String inValue, boolean includeSymbol, boolean includeDecimal) { boolean result = false; if (inValue != null) { inValue = inValue.trim(); if (!inValue.equals("")) { if (inValue.indexOf("=") != -1) { inValue = inValue.substring(inValue.indexOf("=") + 1); } inValue = inValue.trim(); String nString = "1234567890"; if (includeSymbol) nString += "-"; if (includeDecimal) nString += "."; result = true; for (int i=0; i < inValue.length(); i++) { if (nString.indexOf(inValue.substring(i, i+1)) == -1) { result = false; break; } } } } return result; } public static String getIDAsString(ArrayList idList, int idFrom, int idTo) { String IDs = null; if (idList != null && idList.size() > 0) { if (idFrom < 0) idFrom = 0; if (idTo > idList.size()) idTo = idList.size(); int lp; IDs = idList.get(idFrom).toString(); if (idList.size() > 1 && idTo > idFrom) { for (lp = idFrom+1; lp < idTo; lp ++) IDs += "," + idList.get(lp).toString(); } } return IDs; } public static String getPreparedParameterList(int fromID, int toID) { String result = ""; for (int i = fromID; i <= toID; i++) { if (i == fromID) result += "?"; else result += ",?"; } return result; } public static void setPreparedParameterList(PreparedStatement stmt, int startParamIndex, ArrayList idList, int fromID, int toID) throws Exception { int idx = startParamIndex; for (int i = fromID; i <= toID; i++) { stmt.setInt(idx, idList.get(i).intValue()); idx ++; } } public static String replaceMailAddress(String mailAddress, String oldPattern, String newPattern) { if (mailAddress == null || mailAddress.trim().equals("") || oldPattern == null || newPattern == null) return mailAddress; else { return mailAddress.trim().replaceAll(oldPattern, newPattern); } } public static String getValidMailAddress(String mailAddress, String defaultAddress) { if (mailAddress != null && !mailAddress.trim().equals("")) return mailAddress; else return defaultAddress; } public static String getValidString(String str) { if (str == null) return ""; else return str; } public static String[] getMailTo(String to) { String[] toAC = null; if (to != null && to.indexOf("@") != -1) { if (to.indexOf(",") != -1) toAC = to.split(","); else if (to.indexOf(";") != -1) toAC = to.split(";"); else if (to.indexOf(" ") != -1) toAC = to.split(" "); else { toAC = new String[1]; toAC[0] = to; } } return toAC; } public static int getASCII(String str) { int result = 48; if (str != null && !str.trim().equals("")) { result = 48 + Integer.parseInt(str); } return result; } public static void getKeyAsVector(String s_key, Vector v_key) { int idx; if (s_key != null && !s_key.trim().equals("")) { if (s_key.startsWith(".")) s_key = s_key.substring(1); while (s_key.length() > 0) { idx = s_key.indexOf("."); if (idx != -1) { v_key.addElement(s_key.substring(0, idx)); s_key = s_key.substring(idx+1); } else { v_key.addElement(s_key); s_key = ""; } } } } public static String getNameFromAscII(String s_key, int startIndex, int length) { Vector v_key = new Vector(); Utility.getKeyAsVector(s_key, v_key); String result = getNameFromAscII(v_key, startIndex, length); v_key = null; return result; } public static String getNameFromAscII(Vector v_key, int startIndex, int length) { String result = ""; if (length > v_key.size() - startIndex) length = v_key.size() - startIndex; for (int i = startIndex; i < startIndex + length; i++) { result += (char)Integer.parseInt(v_key.elementAt(i)); } return result; } public static String NameToASCII(String str) { String result = null; char[] ch = str.toCharArray(); for (int i = 0; i < ch.length; i++) { if (result == null) result = String.valueOf((int)ch[i]); else result = result + "." + String.valueOf((int)ch[i]); } return result; } public static void writeLog(String log) { try { System.out.println(getFormatedTimeStamp() + " : " + log); } catch (Exception e) { } } public static String intToHex(int i) { String result = Integer.toHexString(i).trim(); if (result.length() == 0) result = "00"; if (result.length() == 1) result = "0" + result; return result; } public static int HexToInt(String s) { return Integer.parseInt(Integer.valueOf(s, 16).toString()); } public static ArrayList str2List(String str){ ArrayList list = new ArrayList<>(); if(str!=null && str.trim().length()>0){ if(str.indexOf(",")!=-1){ String[] arr = str.split(","); for (String string : arr) { list.add(string); } }else{ list.add(str); } } return list; } public static String getDateFormat(Calendar calendar){ String returnValue=""; Date now = new Date(); long leftTime=now.getTime()-calendar.getTimeInMillis(); long day=leftTime/(24*60*60*1000); long hour=(leftTime/(60*60*1000)-day*24); long min=((leftTime/(60*1000))-day*24*60-hour*60); long s=(leftTime/1000-day*24*60*60-hour*60*60-min*60); if(returnValue.equals("") && day>=365){ int year = (int) (day/365); returnValue=year+"年前"; } if(returnValue.equals("") && day>=30){ int month = (int) (day/30); returnValue=month+"个月前"; } if(returnValue.equals("") && day > 0) returnValue=day+"天前"; if(returnValue.equals("") && hour > 0 ) returnValue=hour+"小时前"; if(returnValue.equals("") && min > 0 ) returnValue=min+"分前"; if(returnValue.equals("") && s > 0) returnValue=s+"秒前"; if(returnValue.equals("")) returnValue="0秒前"; return returnValue; } public static String getUUID(){ return java.util.UUID.randomUUID().toString(); } /** * 格式化日期 eg. 2014年07月10日 12:29 星期四 * @param date * @return */ public static String getDateCN(Date date){ SimpleDateFormat dateFm = new SimpleDateFormat("yyyy年MM月dd日 HH:mm EEEE"); return dateFm.format(date); } /** * 获取文件的后缀名 * @param filename * @return */ public static String getFileSuffix(String filename){ String suffix=""; if(filename!=null && filename.indexOf(".")!=-1)suffix=filename.substring(filename.lastIndexOf(".")); return suffix; } public static String getFileSuffix(File file){ String fileName=file.getName(); return getFileSuffix(fileName); } /** * 获取访问者IP * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。 * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割), * 如果还不存在则调用Request.getRemoteAddr()。 * @param request * @return */ public static String getClientIPAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { // 多次反向代理后会有多个IP值,第一个为真实IP。 int index = ip.indexOf(','); if (index != -1) { ip = ip.substring(0, index); } } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("PRoxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } public static String listToString(List stringList){ if (stringList==null) { return null; } StringBuilder result=new StringBuilder(); boolean flag=false; for (Object string : stringList) { if (flag) { result.append(","); }else { flag=true; } result.append(String.valueOf(string)); } return result.toString(); } public static boolean strIsEqual(String str1, String str2){ if(StringUtils.isBlank(str1) || StringUtils.isBlank(str2))return false; if(str1.equals(str2) || str1.trim().equals(str2.trim()))return true; else return false; } /** * 判断是否是整数 * @param str * @return */ public static boolean isNumber(String str){ if(StringUtils.isEmpty(str))return false; try { Long.parseLong(str); return true; } catch (Exception e) { return false; } } /** * 判断是否是浮点数 * @param str * @return */ public static boolean isDouble(String str){ if(StringUtils.isEmpty(str))return false; try { Double.parseDouble(str); return true; } catch (Exception e) { return false; } } /** * 密码加密方法 * @param pwd * @return */ public static String encryptPwd(String pwd){ if(StringUtils.isEmpty(pwd))return null; else return UnixCrypt.crypt(pwd, DigestUtils.sha256Hex(pwd)); } /** * 优惠码的生成, 默认6为长度 * @return */ public static String getCode() { return getCode(6); } /** * 优惠码的生成 * @return */ public static String getCode(int length) { char[] chs = { 'a', 'b', 'c', '1', '2', '3', '4', '5', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '6', '7', '8', '9' }; SecureRandom random = new SecureRandom(); final char[] value = new char[length]; for (int i = 0; i < length; i++) { value[i] = chs[random.nextInt(chs.length)]; } final String code = new String(value); return code; } /** * 通过正则验证手机号码是否正确 * @param str * @return */ public static boolean isMobile(String str) { boolean b = false; Pattern p=Pattern.compile("^1(3|4|5|7|8)\\d{9}$"); Matcher m = p.matcher(str); b = m.matches(); return b; } /** * 使用urlencode对链接进行编码 * @param url * @return */ public static String UrlEncode(String url){ if(url == null || url.trim().equals(""))return null; try { return URLEncoder.encode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } } /** * 使用URLDecoder对链接进行解码 * @param url * @return */ public static String UrlDecode(String url){ if(url == null || url.trim().equals(""))return null; try { return URLDecoder.decode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } } public static boolean isEmpty(String str){ return (str == null || "".equals(str.trim())); } public static boolean isNotEmpty(String str){ return (str != null && str.trim().length() > 0); } /** * 判断文件是否是图片 * @param file * @return */ public static boolean isImage(File file){ if(file == null)return false; boolean flag = false; try { InputStream inputStream = new FileInputStream(file); flag = isImage(inputStream); inputStream.close(); } catch (Exception e) { } return flag; } /** * 判断输入流是否是图片 * @param inputStream * @return */ public static boolean isImage(InputStream inputStream){ boolean flag = false; try { BufferedImage Image=ImageIO.read(inputStream); if(null == Image) { return flag; } Image.flush(); flag = true; } catch (Exception e){ } return flag; } /** * 通过文件路径获取文件的ContentType * JDK1.7以上支持 * @param filePath * @return ContentType */ public static String getFileContentType(String filePath){ String contentType = null; try { contentType = Files.probeContentType(Paths.get(filePath)); } catch (IOException e) { e.printStackTrace(); } return contentType; } public static String getReqIpAddr(HttpServletRequest request) { String ip = null; try { ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if(ip == null){ ip = "未知IP"; } } catch (Exception e) { e.printStackTrace(); } return ip; } /** * 获取http访问路径,包括ContextPath * @param request * @return */ public static String getDomainPath(HttpServletRequest request){ String strport = ""; int port = request.getServerPort(); if(port != 80){ strport = ":"+port; } String domainPath = request.getScheme()+"://"+request.getServerName()+strport+request.getContextPath(); return domainPath; } /** * 生成微信支付需要的nonce_str参数 * @return */ public static String getNonceStr(){ return UUID.randomUUID().toString().replace("-", ""); } /** * 生成[min,max]区间的随机小数 (保留2位小数) * @param min * @param max * @return */ public static double getRandom(double min, double max){ return getRandom(min, max, 2); } /** * 生成[min,max]区间的随机小数 * @param min * @param max * @param scale 精度位数(保留的小数位数) * @return */ public static double getRandom(double min, double max, int scale){ Random r = new Random(); double result = r.nextDouble() * (max-min) + min; result = round(result, scale); // 精度位数(保留的小数位数) return result; } private static double round(double value, int scale) { return round(value, scale, BigDecimal.ROUND_HALF_UP); } /** * 对double数据进行取精度. * @param value double数据. * @param scale 精度位数(保留的小数位数). * @param roundingMode 精度取值方式. * @return 精度计算后的数据. */ private static double round(double value, int scale, int roundingMode) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(scale, roundingMode); double d = bd.doubleValue(); bd = null; return d; } /** * double保留2位小数 * @param value * @return */ public static double getDouble2(double value) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); double d = bd.doubleValue(); bd = null; return d; } /** * 向URL中添加参数(有则修改,无则添加) * @param url * @param ParamName * @param ParamValue * @return */ public static String addParamValue(String url, String ParamName, String ParamValue) { if(StringUtils.isNotBlank(url) && StringUtils.isNotBlank(ParamName) && StringUtils.isNotBlank(ParamValue)) { if(url.contains(ParamName+"=")){ url = replaceParamValue(url, ParamName, ParamValue); }else{ if(url.contains("?") || url.contains("\\?")){ url += "&"+ParamName+"=" + ParamValue; }else{ url += "?"+ParamName+"=" + ParamValue; } } } return url; } /** * 替换URL参数的值 * @param url * @param ParamName * @param ParamValue * @return */ public static String replaceParamValue(String url, String ParamName, String ParamValue) { if(StringUtils.isNotBlank(url) && StringUtils.isNotBlank(ParamName) && StringUtils.isNotBlank(ParamValue)) { url = url.replaceAll("(\\?" + ParamName +"=[^&]*)", "?"+ParamName + "=" + ParamValue); url = url.replaceAll("(\\&" + ParamName +"=[^&]*)", "&"+ParamName + "=" + ParamValue); } return url; } /** * 删除URL中的参数 * @param url * @param ParamName * @return */ public static String removeParamValue(String url, String ParamName) { if(StringUtils.isNotBlank(url) && StringUtils.isNotBlank(ParamName)) { while(url.contains("?"+ParamName+"=") || url.contains("%3f"+ParamName+"%3d") || url.contains("%3F"+ParamName+"%3D") || url.contains("&"+ParamName+"=") || url.contains("%26"+ParamName+"%3d") || url.contains("%26"+ParamName+"%3D")){ url = url.replaceAll("(\\?" + ParamName +"=[^&]*)", ""); url = url.replaceAll("(%3f" + ParamName +"%3d[^&]*)", ""); url = url.replaceAll("(%3F" + ParamName +"%3D[^&]*)", ""); url = url.replaceAll("(\\&" + ParamName +"=[^&]*)", ""); url = url.replaceAll("(%26" + ParamName +"%3d[^&]*)", ""); url = url.replaceAll("(%26" + ParamName +"%3D[^&]*)", ""); } } return url; } /** * 获取当天日期 * @return */ public static int getDateNum() { return getDateNum(new Date()); } // 获取指定时间日期 public static int getDateNum(Date date) { String dateStr = getDateFormat(date, "yyyyMMdd"); int dateNum = Integer.parseInt(dateStr); return dateNum; } public static String getRandomCode() { return getRandomCode(5); } public static String getRandomCode(int length) { char[] chs = { 'a', 'b', 'c', '1', '2', '3', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F', '4', '5', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', '6', '8', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '6', '7', '8', '9', '2', '5', '9', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; SecureRandom random = new SecureRandom(); char[] value = new char[length]; for (int i = 0; i < length; i++) { value[i] = chs[random.nextInt(chs.length)]; } String code = new String(value); return code; } public static void main(String[] args) { System.out.println(getDouble2(2.31468d)); } }