|
@@ -0,0 +1,354 @@
|
|
|
+package com.huaxu.common;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
+import cn.hutool.core.util.NumberUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.context.MessageSource;
|
|
|
+import org.springframework.context.i18n.LocaleContextHolder;
|
|
|
+
|
|
|
+import java.io.*;
|
|
|
+import java.util.*;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 高频使用工具类
|
|
|
+ * @author wyy
|
|
|
+ * @date 2020-03-11 15:02
|
|
|
+ */
|
|
|
+public class ToolUtil {
|
|
|
+
|
|
|
+ private static int counter = 0;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取随机字符,自定义长度
|
|
|
+ *
|
|
|
+ * @author wyy
|
|
|
+ * 2020-03-11 15:07
|
|
|
+ */
|
|
|
+ public static String getRandomString(int length) {
|
|
|
+ String base = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
|
+ Random random = new Random();
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ int number = random.nextInt(base.length());
|
|
|
+ sb.append(base.charAt(number));
|
|
|
+ }
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断对象是否为空 true 不为空
|
|
|
+ * @author wyy
|
|
|
+ * @date 2020-03-11 15:07
|
|
|
+ */
|
|
|
+ public static boolean isNotEmpty(Object o) {
|
|
|
+ return !isEmpty(o);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 对象是否为空 true 为空
|
|
|
+ * @author wyy
|
|
|
+ * @date 2020-03-11 15:09
|
|
|
+ */
|
|
|
+ public static boolean isEmpty(Object o) {
|
|
|
+ if (o == null) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (o instanceof String) {
|
|
|
+ if ("".equals(o.toString().trim())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (o instanceof List) {
|
|
|
+ if (((List<?>) o).size() == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (o instanceof Map) {
|
|
|
+ if (((Map<?, ?>) o).size() == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (o instanceof Set) {
|
|
|
+ if (((Set<?>) o).size() == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (o instanceof Object[]) {
|
|
|
+ if (((Object[]) o).length == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (o instanceof int[]) {
|
|
|
+ if (((int[]) o).length == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else if (o instanceof long[]) {
|
|
|
+ if (((long[]) o).length == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对象组中是否存在空对象
|
|
|
+ *
|
|
|
+ * @author wyy
|
|
|
+ * @Date 2020-03-11 15:09
|
|
|
+ */
|
|
|
+ public static boolean isOneEmpty(Object... os) {
|
|
|
+ for (Object o : os) {
|
|
|
+ if (isEmpty(o)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对象组中是否全是空对象
|
|
|
+ *
|
|
|
+ * @author wyy
|
|
|
+ * @date 2020-03-11 15:09
|
|
|
+ */
|
|
|
+ public static boolean isAllEmpty(Object... os) {
|
|
|
+ for (Object o : os) {
|
|
|
+ if (!isEmpty(o)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据消息键和参数 获取消息 委托给Spring messageSource
|
|
|
+ *
|
|
|
+ * @param code 消息键
|
|
|
+ * @param args 参数
|
|
|
+ * @return 获取国际化翻译值
|
|
|
+ */
|
|
|
+ public static String message(String code, Object... args){
|
|
|
+ MessageSource messageSource = SpringUtil.getBean(MessageSource.class);
|
|
|
+ try{
|
|
|
+ return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
|
|
|
+ }catch (Exception e){
|
|
|
+ return code;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 字节计算转换
|
|
|
+ *
|
|
|
+ * <pre>
|
|
|
+ * StrUtil.convertFileSize(1024) = 1kB
|
|
|
+ * </pre>
|
|
|
+ * @author wyy
|
|
|
+ * @time 2019-04-03 12:29
|
|
|
+ * @param size 字节大小
|
|
|
+ * @return 转换后大小字符串
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public static String convertFileSize(long size) {
|
|
|
+ long kb = 1024;
|
|
|
+ long mb = kb * 1024;
|
|
|
+ long gb = mb * 1024;
|
|
|
+ if (size >= gb)
|
|
|
+ {
|
|
|
+ return StrUtil.format("{} GB", NumberUtil.round((float) size / gb,2));
|
|
|
+ }
|
|
|
+ else if (size >= mb)
|
|
|
+ {
|
|
|
+ float f = NumberUtil.round((float) size / mb,2).floatValue();
|
|
|
+ return StrUtil.format(f > 100 ? "{} MB" : "{} MB", f);
|
|
|
+ }
|
|
|
+ else if (size >= kb)
|
|
|
+ {
|
|
|
+ float f = NumberUtil.round((float) size / kb,2).floatValue();
|
|
|
+ return StrUtil.format(f > 100 ? "{} KB" : "{} KB", f);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return StrUtil.format("{} B", size);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getMessage(Exception e){
|
|
|
+ StringWriter sw = null;
|
|
|
+ PrintWriter pw = null;
|
|
|
+ try {
|
|
|
+ sw = new StringWriter();
|
|
|
+ pw = new PrintWriter(sw);
|
|
|
+ e.printStackTrace(pw);
|
|
|
+ pw.flush();
|
|
|
+ sw.flush();
|
|
|
+ } finally {
|
|
|
+ if (sw != null) {
|
|
|
+ try {
|
|
|
+ sw.close();
|
|
|
+ } catch (IOException e1) {
|
|
|
+ e1.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (pw != null) {
|
|
|
+ pw.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sw.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean isBoolIp(String ipAddress) {
|
|
|
+ String ip = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
|
|
|
+ Pattern pattern = Pattern.compile(ip);
|
|
|
+ Matcher matcher = pattern.matcher(ipAddress);
|
|
|
+ return matcher.matches();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String createFolder(String folder){
|
|
|
+ folder += File.separator + DateUtil.format(new Date(),"yyyy") + File.separator + DateUtil.format(new Date(),"MM") +
|
|
|
+ File.separator + DateUtil.format(new Date(),"dd")+ File.separator;
|
|
|
+ FileUtil.mkdir(folder);
|
|
|
+ return folder;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编码文件名
|
|
|
+ */
|
|
|
+ public static String encodingFilename(String fileName) {
|
|
|
+ fileName = fileName.replace("_", " ");
|
|
|
+ fileName = Md5Util.hash(fileName + System.nanoTime() + counter++);
|
|
|
+ return fileName;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String encodingExcelFilename(String filename){
|
|
|
+ filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx";
|
|
|
+ return filename;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修正路径,将 \\ 或 / 等替换为 File.separator
|
|
|
+ * @param path 待修正的路径
|
|
|
+ * @return 修正后的路径
|
|
|
+ */
|
|
|
+ public static String path(String path) {
|
|
|
+ String p = StringUtils.replace(path, "\\", "/");
|
|
|
+ p = StringUtils.join(StringUtils.split(p, "/"), "/");
|
|
|
+ if (!StringUtils.startsWithAny(p, "/") && StringUtils.startsWithAny(path, "\\", "/")) {
|
|
|
+ p += "/";
|
|
|
+ }
|
|
|
+ if (!StringUtils.endsWithAny(p, "/") && StringUtils.endsWithAny(path, "\\", "/")) {
|
|
|
+ p = p + "/";
|
|
|
+ }
|
|
|
+ if (path != null && path.startsWith("/")) {
|
|
|
+ p = "/" + p; // linux下路径
|
|
|
+ }
|
|
|
+ if (StringUtils.endsWithAny(p, "/")) {
|
|
|
+ p = p.substring(0, p.length() - 1);
|
|
|
+ }
|
|
|
+ return p;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取工程源文件所在路径
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getProjectPath(){
|
|
|
+ String projectPath = "";
|
|
|
+ try {
|
|
|
+ File file = ResourceUtil.getResource("").getFile();
|
|
|
+ if (file != null){
|
|
|
+ while(true){
|
|
|
+ File f = new File(path(file.getPath() + "/src/main"));
|
|
|
+ if (f.exists()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ f = new File(path(file.getPath() + "/target/classes"));
|
|
|
+ if (f.exists()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (file.getParentFile() != null){
|
|
|
+ file = file.getParentFile();
|
|
|
+ }else{
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ projectPath = file.toString();
|
|
|
+ }
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
+ // 忽略异常
|
|
|
+ } catch (IOException e) {
|
|
|
+ // 忽略异常
|
|
|
+ }
|
|
|
+ // 取不到,取当前工作路径
|
|
|
+ if (StringUtils.isBlank(projectPath)){
|
|
|
+ projectPath = System.getProperty("user.dir");
|
|
|
+ }
|
|
|
+ return projectPath;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取工程源文件所在路径
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getWebappPath(){
|
|
|
+ String webappPath = "";
|
|
|
+ try {
|
|
|
+ File file = ResourceUtil.getResource("").getFile();
|
|
|
+ if (file != null){
|
|
|
+ while(true){
|
|
|
+ File f = new File(path(file.getPath() + "/WEB-INF/classes"));
|
|
|
+ if (f.exists()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ f = new File(path(file.getPath() + "/src/main/webapp"));
|
|
|
+ if (f.exists()){
|
|
|
+ return f.getPath();
|
|
|
+ }
|
|
|
+ if (file.getParentFile() != null){
|
|
|
+ file = file.getParentFile();
|
|
|
+ }else{
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ webappPath = file.toString();
|
|
|
+ }
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
+ // 忽略异常
|
|
|
+ } catch (IOException e) {
|
|
|
+ // 忽略异常
|
|
|
+ }
|
|
|
+ // 取不到,取当前工作路径
|
|
|
+ if (StringUtils.isBlank(webappPath)){
|
|
|
+ webappPath = System.getProperty("user.dir");
|
|
|
+ }
|
|
|
+ return webappPath;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 数组以某种分隔符拼装
|
|
|
+ * @param value Long数值
|
|
|
+ * @param s 分隔符
|
|
|
+ * @return 拼装之后的字符串
|
|
|
+ */
|
|
|
+ public static String conversion(Object value, String s){
|
|
|
+ String src = "";
|
|
|
+ if(value instanceof Long[]){
|
|
|
+ Long[] a = (Long[]) value;
|
|
|
+ for(Long l: a){
|
|
|
+ src += l+s;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(value instanceof List){
|
|
|
+ List<String> a = (List) value;
|
|
|
+ for(int i=0; i< a.size(); i++){
|
|
|
+ src += a.get(i)+s;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return src.substring(0,src.length()-s.length());
|
|
|
+ }
|
|
|
+
|
|
|
+}
|