Java开发常用的方法-每天都会更新

文件上传常用方法:

1.判断上传文件的类型

/**
     * 判断上传文件的类型
     *
     * @param file 文件
     * @param excludeImg 是不是该后缀名 (jpg,png,exe)
     * @return true 是规定的类型 false 不是
     */
    public static boolean getImgType(MultipartFile file, String excludeImg) {
    	// 判断参数是否为空
        if(file.getSize() == 0 ){
            return false;
        }
        // 把字符串转化为数组
        String[] imgArr = excludeImg.split(",");
        for (int i = 0; i < imgArr.length; i++) {
            // 获取文件名字
            String fileName = file.getOriginalFilename();
            // 获取文件后缀
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            if(imgArr[i].equals(suffix)){
                return true;
            }
        }
        return false;
    }

2.判断上传文件的类型

 /**
   * 获取项目运行所在的目录并创建指定文件夹
   *
   * @param subdirectory 文件夹名称
   * @return
   */
  public static String getPath(String subdirectory) {
      //获取跟目录---与jar包同级目录的upload目录
      File upload = null;
      try {
          // 获取项目中所在的路径
          // C:\Users\Administrator\Desktop\SpringBoot\xx\xx-common\target\classes
          File path = new File(ResourceUtils.getURL("classpath:").getPath());
          // 判断目录是否存在
          if (!path.exists()) path = new File("");
          // 项目运行目录 + subdirectory
          upload = new File(path.getAbsolutePath(), subdirectory);
          //如果不存在则创建目录
          if (!upload.exists()) upload.mkdirs();
          String realPath = upload + "/";
          return realPath;// C:\Users\Administrator\Desktop\SpringBoot\XX\XX-common\target\classes\123/
      } catch (FileNotFoundException e) {
          LOG.info("GetServerPathUtil===>获取服务器路径发生错误!");
          throw new RuntimeException("获取服务器路径发生错误!");
      }
  }

3.文件上传工具

  /**
   * 文件上传工具
   * @param file 文件
   * @param subdirectory 上传路径
   * @return success 成功 error失败
   */
  public static Map<String, String> saveMultFile(MultipartFile file, String subdirectory) {
      String path = GetServerPathUtil.getPath(subdirectory);// 上传文件路径
      String originalFilename = file.getOriginalFilename();//  获取文件名称
      String fielhouzhui = originalFilename.substring(originalFilename.lastIndexOf("."),originalFilename.length());
      // 重新修改文件名防止重名
      String filename = new SimpleDateFormat("yyyyMMddHHmmssSSS")
              .format(new Date())
              + (new Random().nextInt(9000) % (9000 - 1000 + 1) + 1000) + StringUtils.getUUID() + fielhouzhui;
      File filepath = new File(path, filename);
      // 判断路径是否存在,没有就创建一个
      if (!filepath.getParentFile().exists()) {
          filepath.getParentFile().mkdirs();
      }
      // 将上传文件保存到一个目标文档中
      Map<String, String> map = new HashMap<>();
      File file1 = new File(path + File.separator + filename);
      try {
          file.transferTo(file1);
          map.put("res", "success");
          map.put("url", filename);
          return map;
      } catch (IOException e) {
          map.put("res", "error");
          return map;
      }
  }

4.图片上传并压缩

需要导入以下jar包:

<!-- 图片压缩 -->
<dependency>
	<groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
	<version>0.4.8</version>
</dependency>

代码:

/**
 * 图片上传并压缩
 *
 * @param file 文件
 * @param subdirectory 文件夹名称
 * @param width 图片宽度
 * @param height 图片高度
 * @return
 */
public static Map<String, String> saveImgCompress(MultipartFile file, String subdirectory,Integer width,Integer height) {
    String path = GetServerPathUtil.getPath("uploadImg");//上传文件路径
    String filename = file.getOriginalFilename();// 获取文件名称
    String fielhouzhui = filename.substring(filename.lastIndexOf("."), filename.length());// 获取文件后缀名
    // 重新修改文件名防止重名
    filename = new SimpleDateFormat("yyyyMMddHHmmssSSS")
            .format(new Date())
            + (new Random().nextInt(9000) % (9000 - 1000 + 1) + 1000) + StringUtils.getUUID() + fielhouzhui;
    File filepath = new File(path, filename);
    // 判断路径是否存在,没有就创建一个
    if (!filepath.getParentFile().exists()) {
        filepath.getParentFile().mkdirs();
    }
    File img = new File(path + File.separator + filename);
    Map<String, String> map = new HashMap<>();
    try {
        Thumbnails.of(file.getInputStream()).size(width,height).toFile(img);
        map.put("res", "success");
        map.put("url", filename);
        return map;
    } catch (IOException e) {
        log.info(filename + "图片上传失败:" + e);
        map.put("res", "error");
        return map;
    }
}

5.文件删除

/**
  * 文件删除
  *
  * @param fileNmae 文件名字
  * @return
  */
  public static String delFile(String fileName,String subdirectory){
	// 获取存放路径
	String path = GetSerPathUtil.getPath(subdirectory);
	String resultInfo = null;
	File file = new File (sb);
	if(file.exists()){
		if(file.delete()){
			resultInfo = "1";// 删除成功
		}else{
			resultInfo = "1";// 删除失败
		}
	} else {
            resultInfo = "-1";// 文件不存在
	return resultInfo;
	}

字符串常用方法:

1.获取32位小写的UUID

/**
     *  获取32位小写的UUID
     * @return 32位UUID
     */
    public static String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

2.获取32位大写的UUID

    /**
     *  获取32位大写的UUID
     * @return 32位UUID
     */
    public static String getUUIDStr() {
        return UUID.randomUUID().toString().replace("-", "").toUpperCase();
    }

3.判断字符串是否为空

/**
    * * 判断一个字符串是否为非空串
    *
    * @param str String
    * @return true:非空串 false:空串
    */
   public static boolean isNotEmpty(String str) {
       return !isEmpty(str);
   }

4.判断多个字符串是否为空

/**
 * 判断多个字符串是否为空
  *
  * @param list 值 ("1","2"....)
  * @return true:为空 false:非空
  */
 public static boolean isAllStrEmpty(String... list) {
     // 判断数据是否为空
     for (String str : list) {
         if (StringUtils.isEmpty(str)) {
             return true;
         }
     }
     return false;
 }

5.将下划线大小写字符转换为驼峰命名式

/**
     * 将下划线大小写字符转换为驼峰命名式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld
     *
     * @param str 转换前的下划线大写方式命名的字符串
     * @return 转换后的驼峰式命名的字符串
     */
 public static String convertToCamelCase(String str) {
        StringBuilder result = new StringBuilder();
        // 快速检查
        if (str == null || str.isEmpty()) {
            // 没必要转换
            return "";
        } else if (!str.contains("_")) {
            // 不包含下划线,仅首字母大写
            return str.substring(0, 1).toUpperCase() + str.substring(1);
        }
        // 用下划线将原始字符串分割
        String[] camels = str.split("_");
        for (String camel : camels) {
            // 跳过原始字符串开头、结尾的下划线或双重下划线
            if (camel.isEmpty()) {
                continue;
            }
            // 首字母大写
            result.append(camel.substring(0, 1).toUpperCase());
            result.append(camel.substring(1).toLowerCase());
        }
        return result.toString();
    }

Http请求工具:

1.GET请求

/**
     * Get请求
     * @param urlStr
     *   请求的地址
     * @param parameter
     *   请求的参数 格式为:name=xxx&pwd=xxx
     * @param encoding
     *   服务器端请求编码。如GBK,UTF-8等
     * @return
     */
    public static String doGet(String urlStr, String parameter, String encoding) {
        URL url = null;
        HttpURLConnection connection = null;
        try {
            url = new URL(urlStr);
            connection = (HttpURLConnection) url.openConnection();  // 新建连接实例
            connection.setConnectTimeout(2000);                     // 设置连接超时时间,单位毫秒
            connection.setReadTimeout(2000);                        // 设置读取数据超时时间,单位毫秒
            connection.setDoOutput(true);                           // 是否打开输出流 true|false
            connection.setDoInput(true);                            // 是否打开输入流true|false
            connection.setRequestMethod("Get");                     // 提交方法GET
            connection.setUseCaches(false);                         // 是否缓存true|false
            connection.connect();                                   // 打开连接端口
            DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据
            out.writeBytes(parameter);                              // 写数据,也就是提交你的表单 name=xxx&pwd=xxx
            out.flush();                                            // 刷新
            out.close();                                            // 关闭输出流
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据 ,以BufferedReader流来读取
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            reader.close();
            return buffer.toString();
        } catch (IOException e) {
            // e.printStackTrace();
            System.err.println("MyHttpUtils==>通过url打开一个连接出现异常:" + e);
            LOG.error("MyHttpUtils==>通过url打开一个连接出现异常:" + e);
        } finally {
            if (connection != null) {
                connection.disconnect();// 关闭连接
            }
        }
        return null;
    }

2.POST请求

/**
     * Post请求
     * @param urlStr
     *   请求的地址
     * @param parameter
     *   请求的参数 格式为:name=xxx&pwd=xxx
     * @param encoding
     *   服务器端请求编码。如GBK,UTF-8等
     * @return
     */
    public static String doPost(String urlStr, String parameter, String encoding) {
        URL url = null;
        HttpURLConnection connection = null;
        try {
            url = new URL(urlStr);
            connection = (HttpURLConnection) url.openConnection();  // 新建连接实例
            connection.setConnectTimeout(2500);                     // 设置连接超时时间,单位毫秒
            connection.setReadTimeout(2500);                        // 设置读取数据超时时间,单位毫秒
            connection.setDoOutput(true);                           // 是否打开输出流 true|false
            connection.setDoInput(true);                            // 是否打开输入流true|false
            connection.setRequestMethod("POST");                    // 提交方法POST
            connection.setUseCaches(false);                         // 是否缓存true|false
            connection.connect();                                   // 打开连接端口
            DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据
            out.writeBytes(parameter);                              // 写数据,也就是提交你的表单 name=xxx&pwd=xxx
            out.flush();                                            // 刷新
            out.close();                                            // 关闭输出流
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据 ,以BufferedReader流来读取
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            reader.close();
            return buffer.toString();
        } catch (IOException e) {
            // e.printStackTrace();
            System.err.println("MyHttpUtils==>通过url打开一个连接出现异常:" + e);
            log.error("MyHttpUtils==>通过url打开一个连接出现异常:" + e);
        } finally {
            if (connection != null) {
                connection.disconnect();// 关闭连接
            }
        }
        return null;
    }

密码加密:

1.执行一次加密,两次解密

	/**
     * 加密解密算法 执行一次加密,两次解密
     *
     * @param inStr 字符串
     * @return
     */
    public static String convertMD5(String inStr) {
        char[] a = inStr.toCharArray();
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 't');
        }
        String s = new String(a);
        return s;
    }

2.生成32位md5码

	/**
     * 生成32位md5码
     *
     * @param str 需要加密的字符串
     * @return 32位的md5码
     */
    public static String md5(String str) {
        return DigestUtils.md5Hex(str);
    }

获取IP方法:

IpUtils

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

/**
 * 获取IP方法
 *
 * @author xiaofei
 */
@Slf4j
public class IpUtils {


    public static final String IP_URL = "http://ip.taobao.com/service/getIpInfo.php?ip=";


    /**
     * 获取客户端IP
     *
     * @param request
     * @return ip 客户端IP地址
     */
    public static String getIpAddr(HttpServletRequest request) {
        if (request == null) {
            return "unknown";
        }
        String 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("X-Forwarded-For");
        }
        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 "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
    }

    /**
     * 获取IP归属地
     *
     * @return
     * @throws Exception
     */
    public static Map<String, String> getIpAffiliation(HttpServletRequest req) {
        Map<String, String> map = new HashMap<>();
        // 获取ip地址
        String ip = IpUtils.getIpAddr(req);
        String address = "error";
        map.put("code", "0");
        // 内网不查询
        if (IpUtils.internalIp(ip)) {
            map.put("msg", "内网IP");
            return map;
        }
        // 判断是否为空
        if (StringUtils.isEmpty(ip)) {
            log.error("ip地址为空", ip);
            map.put("msg", "ip获取失败!");
            return map;
        }
        try {
            String url = IP_URL + ip;
            URLConnection urlConnection = new URL(url).openConnection();
            //打开与服务器的连接
            urlConnection.connect();
            StringBuilder stringBuilder = new StringBuilder();
            //读取服务器的响应
            BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), StandardCharsets.UTF_8));
            String line = null;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
            }
            // 把数据解析为JSON
            JSONObject ipInfo = JSON.parseObject(stringBuilder.toString());
            JSONObject data = ipInfo.getJSONObject("data");
            map.put("code", "1");
            // 省份
            map.put("region",data.getString("region"));
            // 城市
            map.put("city",data.getString("city"));
        }catch (Exception e){
            log.error("获取ip省份出现异常", e);
            map.put("msg", "ip获取失败!");
            return map;
        }
        return map;
    }


    /**
     * 判断是不是内网Ip
     *
     * @param ip
     * @return
     */
    public static boolean internalIp(String ip) {
        byte[] addr = textToNumericFormatV4(ip);
        return internalIp(addr) || "127.0.0.1".equals(ip);
    }


    private static boolean internalIp(byte[] addr) {
        final byte b0 = addr[0];
        final byte b1 = addr[1];
        // 10.x.x.x/8
        final byte SECTION_1 = 0x0A;
        // 172.16.x.x/12
        final byte SECTION_2 = (byte) 0xAC;
        final byte SECTION_3 = (byte) 0x10;
        final byte SECTION_4 = (byte) 0x1F;
        // 192.168.x.x/16
        final byte SECTION_5 = (byte) 0xC0;
        final byte SECTION_6 = (byte) 0xA8;
        switch (b0) {
            case SECTION_1:
                return true;
            case SECTION_2:
                if (b1 >= SECTION_3 && b1 <= SECTION_4) {
                    return true;
                }
            case SECTION_5:
                switch (b1) {
                    case SECTION_6:
                        return true;
                }
            default:
                return false;
        }
    }

    /**
     * 将IPv4地址转换成字节
     *
     * @param text IPv4地址
     * @return byte 字节
     */
    public static byte[] textToNumericFormatV4(String text) {
        if (text.length() == 0) {
            return null;
        }

        byte[] bytes = new byte[4];
        String[] elements = text.split("\\.", -1);
        try {
            long l;
            int i;
            switch (elements.length) {
                case 1:
                    l = Long.parseLong(elements[0]);
                    if ((l < 0L) || (l > 4294967295L))
                        return null;
                    bytes[0] = (byte) (int) (l >> 24 & 0xFF);
                    bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);
                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
                    bytes[3] = (byte) (int) (l & 0xFF);
                    break;
                case 2:
                    l = Integer.parseInt(elements[0]);
                    if ((l < 0L) || (l > 255L)) {
                        return null;
                    }
                    bytes[0] = (byte) (int) (l & 0xFF);
                    l = Integer.parseInt(elements[1]);
                    if ((l < 0L) || (l > 16777215L)) {
                        return null;
                    }
                    bytes[1] = (byte) (int) (l >> 16 & 0xFF);
                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
                    bytes[3] = (byte) (int) (l & 0xFF);
                    break;
                case 3:
                    for (i = 0; i < 2; ++i) {
                        l = Integer.parseInt(elements[i]);
                        if ((l < 0L) || (l > 255L)) {
                            return null;
                        }
                        bytes[i] = (byte) (int) (l & 0xFF);
                    }
                    l = Integer.parseInt(elements[2]);
                    if ((l < 0L) || (l > 65535L)) {
                        return null;
                    }
                    bytes[2] = (byte) (int) (l >> 8 & 0xFF);
                    bytes[3] = (byte) (int) (l & 0xFF);
                    break;
                case 4:
                    for (i = 0; i < 4; ++i) {
                        l = Integer.parseInt(elements[i]);
                        if ((l < 0L) || (l > 255L)) {
                            return null;
                        }
                        bytes[i] = (byte) (int) (l & 0xFF);
                    }
                    break;
                default:
                    return null;
            }
        } catch (NumberFormatException e) {
            return null;
        }
        return bytes;
    }
}

以后会继续完善!

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值