整理Java相关的工具类,持续更新中,建议收藏
Posted Roninaxious
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整理Java相关的工具类,持续更新中,建议收藏相关的知识,希望对你有一定的参考价值。
下载地址:
BigDecimalUtil | BigDecimalUtil计算工具类 |
---|---|
CaptchaUtil | 图片验证码工具类 |
CoordinateTransformUtil | 坐标系转换工具类 |
DateUtil | 日期加减工具类 |
EmailUtil | email发送工具类 |
EncodeDecodeUtil | 加密工具类 |
GzipUtil | 压缩工具类 |
HttpClient | http远程调用工具类 |
JwtUtil | jwt工具类 |
LanguageUtil | 语种工具类 |
MD5 | MD5加密工具类 |
ObjectDeepCopyUtil | 对象深度拷贝工具类 |
OrderNoUtil | 订单号工具类 |
PoolPrintUtil | 线程池打印工具类 |
RandomUtil | 手机验证码生成工具类 |
ResponseEntity | 统一结果返回类 |
ResponseUtil | 结果响应工具类 |
XmlUtil | xml转换map工具类 |
持续更新中…
文章目录
- 1.BigDecimalUtil
- 2.CaptchaUtil 图片验证码工具类
- 3.CoordinateTransformUtil 坐标系转换工具类
- 4.DateUtil 日期加减工具类
- 5.EmailUtil email发送工具类
- 6.EncodeDecodeUtil 加密工具类
- 7.GzipUtil 压缩工具类
- 8.HttpClient http远程调用工具类
- 9.JwtUtil jwt工具类
- 10.LanguageUtil 语种工具类
- 11.MD5 MD5加密工具类
- 12.ObjectDeepCopyUtil 对象深度拷贝工具类
- 13.OrderNoUtil 订单号工具类
- 14.PoolPrintUtil 线程池打印工具类
- 15.RandomUtil 手机验证码生成工具类
- 16.ResponseEntity 统一结果返回类
- 17.ResponseUtil 结果响应工具类
- 18.XmlUtil xml转换map工具类
1.BigDecimalUtil
public class BigDecimalUtil {
/**
* x, y转成BigDecimal后相减
* @param x x值(double类型)
* @param y y值 (double类型)
* @return result
*/
public static double subtract(double x, double y) {
BigDecimal d1 = BigDecimal.valueOf(x);
BigDecimal d2 = BigDecimal.valueOf(y);
return d1.subtract(d2).doubleValue();
}
/**
* x, y转成BigDecimal后相减,获得的结果再向上取整
* @param x x值(double类型)
* @param y y值 (double类型)
* @return result
*/
public static double subtractUp(double x, double y) {
double value = subtract(x, y);
return roundUp(value);
}
/**
* x, y转成BigDecimal后相减,获得的结果再向下取整
* @param x x值(double类型)
* @param y y值 (double类型)
* @return result
*/
public static double subtractDown(double x, double y) {
double value = subtract(x, y);
return roundDown(value);
}
/**
* x, y转成BigDecimal后相减
* @param x x值(double类型)
* @param y y值 (double类型)
* @return result
*/
public static double add(double x, double y) {
BigDecimal d1 = BigDecimal.valueOf(x);
BigDecimal d2 = BigDecimal.valueOf(y);
return d1.add(d2).doubleValue();
}
/**
* x, y转成BigDecimal后相乘
* @param x x值(double类型)
* @param y y值 (double类型)
* @return result
*/
public static double multiply(double x, double y) {
BigDecimal d1 = BigDecimal.valueOf(x);
BigDecimal d2 = BigDecimal.valueOf(y);
return d1.multiply(d2).doubleValue();
}
/**
* x, y转成BigDecimal后相除
* @param x x值(double类型)
* @param y y值 (double类型)
* @return result
*/
public static double divide(double x, double y, int scale) {
BigDecimal d1 = BigDecimal.valueOf(x);
BigDecimal d2 = BigDecimal.valueOf(y);
return d1.divide(d2, scale).doubleValue();
}
/**
* 向上取整,整数向上取整
* @param val val
* @return result
*/
public static double roundUp(double val) {
return roundUp(val, 0);
}
/**
* 向上取整,可设置精度
* @param val val
* @param scale 精度
* @return result
*/
public static double roundUp(double val, int scale) {
BigDecimal dec = BigDecimal.valueOf(val);
return dec.setScale(scale, RoundingMode.UP).doubleValue();
}
/**
* 向下取整,可设置精度
* @param val val
* @return result
*/
public static double roundDown(double val) {
return roundDown(val, 0);
}
/**
* 向下取整,可设置精度
* @param val val
* @param scale 精度
* @return result
*/
public static double roundDown(double val, int scale) {
BigDecimal dec = BigDecimal.valueOf(val);
return dec.setScale(scale, RoundingMode.DOWN).doubleValue();
}
/**
* 四舍五入
* @param val val
* @return result
*/
public static double roundHalfUp(double val) {
return roundHalfUp(val, 0);
}
/**
* 四舍五入,可设置精度
* @param val
* @param scale
* @return
*/
public static double roundHalfUp(double val, int scale) {
BigDecimal dec = BigDecimal.valueOf(val);
return dec.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
2.CaptchaUtil 图片验证码工具类
public class CaptchaUtil {
static char[] chars = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
/**
* 生成一个位数为count的随机验证码
*
* @param count
* @return
*/
public static String genCaptcha(int count) {
StringBuilder captcha = new StringBuilder();
for (int i = 0; i < count; i++) {
char c = chars[ThreadLocalRandom.current().nextInt(chars.length)];//随机选取一个字母或数字
captcha.append(c);
}
return captcha.toString();
}
/**
* 为一个验证码生成一个图片
* <p>
* 特性:
* - 颜色随机
* - 上下位置随机
* - 左右位置随机,但字符之间不会重叠
* - 左右随机旋转一个角度
* - 避免字符出界
* - 随机颜色的小字符做背景干扰
* - 根据字符大小自动调整图片大小、自动计算干扰字符的个数
*
* @param captcha
* @return
* @author XuJijun
*/
public static BufferedImage genCaptchaImg(String captcha) {
ThreadLocalRandom r = ThreadLocalRandom.current();
int count = captcha.length();
int fontSize = 80; //code的字体大小
int fontMargin = fontSize / 4; //字符间隔
int width = (fontSize + fontMargin) * count + fontMargin; //图片长度
int height = (int) (fontSize * 1.2); //图片高度,根据字体大小自动调整;调整这个系数可以调整字体占图片的比例
int avgWidth = width / count; //字符平均占位宽度
int maxDegree = 26; //最大旋转度数
//背景颜色
Color bkColor = Color.WHITE;
//验证码的颜色
Color[] catchaColor = {Color.MAGENTA, Color.BLACK, Color.BLUE, Color.CYAN, Color.GREEN, Color.ORANGE, Color.PINK};
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
//填充底色为灰白
g.setColor(bkColor);
g.fillRect(0, 0, width, height);
//画边框
g.setColor(Color.WHITE);
g.drawRect(0, 0, width - 1, height - 1);
//画干扰字母、数字
int dSize = fontSize / 3; //调整分母大小以调整干扰字符大小
Font font = new Font("Fixedsys", Font.PLAIN, dSize);
g.setFont(font);
int dNumber = width * height / dSize / dSize;//根据面积计算干扰字母的个数
for (int i = 0; i < dNumber; i++) {
char d_code = chars[r.nextInt(chars.length)];
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
g.drawString(String.valueOf(d_code), r.nextInt(width), r.nextInt(height));
}
//开始画验证码:
// 创建字体
font = new Font(Font.MONOSPACED, Font.ITALIC | Font.BOLD, fontSize);
// 设置字体
g.setFont(font);
for (int i = 0; i < count; i++) {
char c = captcha.charAt(i);
g.setColor(catchaColor[r.nextInt(catchaColor.length)]);//随机选取一种颜色
//随机旋转一个角度[-maxDegre, maxDegree]
int degree = r.nextInt(-maxDegree, maxDegree + 1);
//偏移系数,和旋转角度成反比,以避免字符在图片中越出边框
double offsetFactor = 1 - (Math.abs(degree) / (maxDegree + 1.0));//加上1,避免出现结果为0
g.rotate(degree * Math.PI / 180); //旋转一个角度
int x = (int) (fontMargin + r.nextInt(avgWidth - fontSize) * offsetFactor); //横向偏移的距离
int y = (int) (fontSize + r.nextInt(height - fontSize) * offsetFactor); //上下偏移的距离
g.drawString(String.valueOf(c), x, y); //x,y是字符的左下角,偏离原点的距离!!!
g.rotate(-degree * Math.PI / 180); //画完一个字符之后,旋转回原来的角度
g.translate(avgWidth, 0);//移动到下一个画画的原点
//System.out.println(c+": x="+x+" y="+y+" degree="+degree+" offset="+offsetFactor);
//X、Y坐标在合适的范围内随机,不旋转:
//g.drawString(String.valueOf(c), width/count*i+r.nextInt(width/count-fontSize), fontSize+r.nextInt(height-fontSize));
}
g.dispose();
return image;
}
}
3.CoordinateTransformUtil 坐标系转换工具类
public class CoordinateTransformUtil {
static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
// π
static double pi = 3.1415926535897932384626;
// 长半轴
static double a = 6378245.0;
// 扁率
static double ee = 0.00669342162296594323;
/**
* 将原本坐标系的经纬度转换成新的坐标系的经纬度
* @param newCoordinateType 新坐标系,如baidu,wgs84
* @param originalCoordinateType 原坐标系,如baidu,wgs84
* @param lat 原纬度
* @param lon 原经度
* @return 新坐标系的经纬度
*/
public static double[] convertLatLonByCoordinate(String newCoordinateType, String originalCoordinateType, double lat, double lon) {
if (originalCoordinateType == null) {
return null;
}
boolean bd09ToWgs84 = (originalCoordinateType.equalsIgnoreCase("bd09") || originalCoordinateType.equalsIgnoreCase("baidu")
&& (newCoordinateType.equalsIgnoreCase("google")) || newCoordinateType.equalsIgnoreCase("wgs84"));
boolean gcj02toWgs84 = (originalCoordinateType.equalsIgnoreCase("gaode") || originalCoordinateType.equalsIgnoreCase("gcj02")
&& (newCoordinateType.equalsIgnoreCase("google")) || newCoordinateType.equalsIgnoreCase("wgs84"));
boolean wgs84ToBd09 = (originalCoordinateType.equalsIgnoreCase("google") || originalCoordinateType.equalsIgnoreCase("wgs84"))
&& (newCoordinateType.equalsIgnoreCase("bd09") || newCoordinateType.equalsIgnoreCase("baidu"));
boolean gcj02ToBd09 = (originalCoordinateType.equalsIgnoreCase("gaode") || originalCoordinateType.equalsIgnoreCase("gcj02"))
&& (newCoordinateType.equalsIgnoreCase("bd09") || newCoordinateType.equalsIgnoreCase("baidu"));
boolean wgs84ToGcj02 = (originalCoordinateType.equalsIgnoreCase("google") || originalCoordinateType.equalsIgnoreCase("wgs84"))
&& (newCoordinateType.equalsIgnoreCase("gaode") || newCoordinateType.equalsIgnoreCase("gcj02"));
boolean bd09ToGcj02 = (originalCoordinateType.equalsIgnoreCase("bd09") || originalCoordinateType.equalsIgnoreCase("baidu"))
&& (newCoordinateType.equalsIgnoreCase("gaode") || newCoordinateType.equalsIgnoreCase("gcj02"));
if (originalCoordinateType.equals(newCoordinateType)) {
return new double[]{lat, lon};
} else if (bd09ToWgs84) {
return bd09towgs84(lon, lat);
} else if (gcj02toWgs84) {
return gcj02towgs84(lon, lat);
} else if (wgs84ToBd09) {
return wgs84tobd09(lon, lat);
} else if (gcj02ToBd09) {
return gcj02tobd09(lon, lat);
} else if (wgs84ToGcj02) {
return wgs84togcj02(lon, lat);
} else if (bd09ToGcj02) {
return bd09togcj02(lon, lat);
} else {
return null;
}
}
/**
* 百度坐标系(BD-09)转WGS坐标
*
* @param lng 百度坐标纬度
* @param lat 百度坐标经度
* @return WGS84坐标数组
*/
public static double[] bd09towgs84(double lng, double lat) {
double[] gcj = bd09togcj02(lng, lat);
double[] wgs84 = gcj02towgs84(gcj[0], gcj[1]);
工具专栏目录(持续更新中,强烈建议收藏)
你肯定遇到过这些电脑使用问题, 此文帮你快速解决一些常见的电脑问题(持续更新中, 建议收藏)