Java常用公共工具记录
1、日期处理工具
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期常用格式转换
*/
public class DateTimeUtil {
static {
ymdhmsFormat = new SimpleDateFormat("yyyyMMddHHmmss");
ymdhmsFormat2 = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
ymdFormat = new SimpleDateFormat("yyyyMMdd");
ymdFormat2 = new SimpleDateFormat("yyyy-MM-dd");
hmsFormat = new SimpleDateFormat("HHmmss");
ymFormat = new SimpleDateFormat("yyyyMM");
c = Calendar.getInstance();
}
private static SimpleDateFormat ymdhmsFormat;
private static SimpleDateFormat ymdhmsFormat2;
private static SimpleDateFormat ymdFormat;
private static SimpleDateFormat ymdFormat2;
private static SimpleDateFormat hmsFormat;
private static SimpleDateFormat ymFormat;//年月
private static Calendar c;
public static Date dateOnly(Date date) {
return yyyyMMddToDate(parseToyyyyMMdd(date));
}
/**
* 转换为 yyyyMMddHHmmss格式
*/
public static String parseToyyyyMMddHHmmss(Date date) {
if (date == null) {
return null;
}
return ymdhmsFormat.format(date);
}
/**
* 转换为 yyyyMMdd HH:mm:ss格式
*/
public static String parseToyyyyMMddHHmmss2(Date date) {
if (date == null) {
return null;
}
return ymdhmsFormat2.format(date);
}
/**
* 转换为HHmmss格式
*/
public static String parseToHHmmss(Date date) {
if (date == null) {
return null;
}
return hmsFormat.format(date);
}
/**
* 转换为yyyyMMdd格式
*/
public static String parseToyyyyMMdd(Date date) {
if (date == null) {
return null;
}
return ymdFormat.format(date);
}
/**
* 转换为yyyyMM格式
*/
public static int parseToyyyyMM(Date date) {
if (date == null) {
return 0;
}
return Integer.valueOf(ymFormat.format(date));
}
public static Date yyyyMMddHHmmssToDate(String yyyyMMddHHmmss) {
try {
return ymdhmsFormat.parse(yyyyMMddHHmmss);
}
catch (Exception e) {
return null;
}
}
public static Date yyyyMMddToDate(String yyyyMMdd) {
try {
return ymdFormat.parse(yyyyMMdd);
}
catch (Exception e) {
return null;
}
}
public static Date yyyyMMToDate(String yyyyMM) {
try {
return ymFormat.parse(yyyyMM);
}
catch (Exception e) {
return null;
}
}
/**
* yyyy-MM-dd转换成date
* @author linbingwen
* @since 2016年4月14日
* @param yyyyMMdd2
* @return
*/
public static Date yyyyMMddToDate2(String yyyyMMdd2) {
try {
return ymdFormat2.parse(yyyyMMdd2);
}
catch (Exception e) {
return null;
}
}
public static Date HHmmssToDate(String HHmmss) {
try {
return hmsFormat.parse(HHmmss);
}
catch (Exception e) {
return null;
}
}
public static Date getDate(Date srcDate, Integer daysToAdd) {
c.setTime(srcDate);
c.add(Calendar.DATE, daysToAdd); // number of days to add
return c.getTime();
}
public static Date yyyyMMddHHmmssToDate2(String yyyyMMddHHmmss) {
try {
return ymdhmsFormat2.parse(yyyyMMddHHmmss);
}
catch (Exception e) {
return null;
}
}
public static final int daysBetween(Date early, Date late) {
java.util.Calendar calst = java.util.Calendar.getInstance();
java.util.Calendar caled = java.util.Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
// 设置时间为0时
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
caled.set(java.util.Calendar.HOUR_OF_DAY, 0);
caled.set(java.util.Calendar.MINUTE, 0);
caled.set(java.util.Calendar.SECOND, 0);
// 得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}
public static Date getNextDayOfWeek(Date date, int dayOfWeek) {
if (dayOfWeek == 0) {
dayOfWeek = 7;
}
if (dayOfWeek > 7 || dayOfWeek < 1) {
throw new RuntimeException("星期:" + dayOfWeek + "不存在");
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
while (true) {
int day = cal.get(Calendar.DAY_OF_WEEK);
if (preWeekDay(day) == dayOfWeek) {
return cal.getTime();
}
cal.add(Calendar.DATE, 1);
}
}
public static Date getNextMonthDate(Date date, int nextMonthDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int day = cal.get(Calendar.DATE);
if (day <= nextMonthDate) {
cal.set(Calendar.DATE, nextMonthDate);
}
else {
cal.set(Calendar.DATE, 1);
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DATE, nextMonthDate);
}
return cal.getTime();
}
public static int nextWeekDay(int day) {
if (day == 7) {
return 1;
}
else {
return day++;
}
}
public static int preWeekDay(int day) {
if (day == 1) {
return 7;
}
else {
return day - 1;
}
}
/**
* 计算两个日期相差的天数
* @param beginDate 【YYYYMMDD】
* @param endDate 【YYYYMMDD】
* @return Integer
* @author linbingwen
* @since 2015年7月21日
*/
public static long diffDate(Date beginDate,Date endDate){
Calendar theCa1= Calendar.getInstance();
Calendar theCa2= Calendar.getInstance();
theCa1.setTime(beginDate);
theCa2.setTime(endDate);
long between_days=(theCa2.getTimeInMillis()-theCa1.getTimeInMillis())/(1000*3600*24);
return between_days;
}
/**
* 分钟差
* @Title: diffMinute
* @Description: TODO
* @author : liuqiuyun
* @param @param beginDate
* @param @param endDate
* @param @return 设定文件
* @return long 返回类型
* @throws
*/
public static long diffMinute(Date beginDate,Date endDate){
Calendar theCa1= Calendar.getInstance();
Calendar theCa2= Calendar.getInstance();
theCa1.setTime(beginDate);
theCa2.setTime(endDate);
long between_minutes=(theCa2.getTimeInMillis()-theCa1.getTimeInMillis())/(1000*60);
return between_minutes;
}
/**
* 获取月份差第一天
* @Title: getMonthFirstDate
* @Description: TODO
* @author : liuqiuyun
* @param @param date
* @param @param monthToAdd
* @param @param minOrMax 月初还是月末
* @param @return 设定文件
* @return Date 返回类型
* @throws
*/
public static Date getMonthFirstDate(Date date,int monthToAdd, String minOrMax) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, monthToAdd);
if(minOrMax.equals("min")){
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
}else if(minOrMax.equals("max")){
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
}
return calendar.getTime();
}
public static long getLastMonth(Date date) {
Date lastDate = getMonthFirstDate(date,-1,"min");
long lastMonth = parseToyyyyMM(lastDate);
return lastMonth;
}
public static void main(String[] args) throws InterruptedException {
// Calendar cal = Calendar.getInstance();
// System.out.println(" cal.get(Calendar.DAY_OF_WEEK);:" + cal.get(Calendar.DAY_OF_WEEK));
// System.out.println(" cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);:" + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
//
// System.out.println(getNextDayOfWeek(cal.getTime(), 0));
// System.out.println(getNextDayOfWeek(cal.getTime(), 7));
// System.out.println(getNextDayOfWeek(cal.getTime(), 1));
// System.out.println(getNextDayOfWeek(cal.getTime(), 2));
//
// System.out.println(getNextMonthDate(cal.getTime(), 0));
// System.out.println(parseToyyyyMMdd(getNextMonthDate(cal.getTime(), 15)));
System.out.println(parseToyyyyMMdd(getMonthFirstDate(yyyyMMddToDate("20160618"),-1,"max")));
// System.out.println(yyyyMMddToDate2("2012-09-01"));
//
// Date start = new Date();
// System.out.println(start);
// Thread.sleep(60*1000*5+1000);
// Date end = new Date();
// System.out.println(end);
// System.out.println(diffMinute(start,end));
}
}
2、http请求处理工具
import java.io.ByteArrayInputStream;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//import com.lz.common.util.http.FileItem;
public class HttpClientUtil {
private static Logger logger = LoggerFactory
.getLogger(HttpClientUtil.class);
public static void main(String[] args) {
HttpURLConnection conn = null;
InputStream ins = null;
try {
// String boundary = System.currentTimeMillis() + "";
// String ctype = "multipart/form-data;boundary=" + boundary;
// conn = HttpClientUtil
// .getConnection(
// null,
// new URL(
// "http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/64/CkvJo1cQVPyATVbKACIyO0-AKoo7735712"),
// "GET", ctype, null);
// conn.setConnectTimeout(1000);
// conn.setReadTimeout(5000);
byte[] bytes = downLoadFile("http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/64/CkvJo1cQVPyATVbKACIyO0-AKoo7735712");
InputStream inputStream =new ByteArrayInputStream(bytes);
// ins = conn.getInputStream();
File file = new File("D:/6.docx");
FileOutputStream fot = new FileOutputStream(file);
com.slob.util.io.IOUtil.inputStreamToOutputStream(inputStream, fot);
} catch (Exception e) {
}
}
public static byte[] downLoadFile(String url) throws IOException {
HttpURLConnection conn = null;
InputStream ins = null;
byte[] bytes = null;
try {
String boundary = System.currentTimeMillis() + "";
String ctype = "multipart/form-data;boundary=" + boundary;
conn = HttpClientUtil.getConnection(null,new URL(url),"GET", ctype, null);
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
ins = conn.getInputStream();
bytes = readBytes(ins);
return bytes;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (ins != null) {
ins.close();
}
if (conn != null) {
conn.disconnect();
}
}
}
public static String uploadFile(String url, String fieldName,
String fileName, InputStream ips, ResponseProcess respProcess)
throws IOException {
HttpURLConnection conn = null;
OutputStream out = null;
try {
String boundary = System.currentTimeMillis() + "";
String ctype = "multipart/form-data;boundary=" + boundary;
conn = HttpClientUtil.getConnection(null, new URL(url), "POST",
ctype, null);
conn.setConnectTimeout(1000);
conn.setReadTimeout(5000);
out = conn.getOutputStream();
byte[] entryBoundaryBytes = ("\r\n--" + boundary + "\r\n")
.getBytes("UTF-8");
out.write(entryBoundaryBytes);
byte[] data = new byte[1024 * 1024];
int size = ips.read(data);
byte[] fileBytes = getFileEntry(fieldName, fileName,
getMimeType(data), "UTF-8");
out.write(fileBytes);
while (size > 0) {
out.write(data, 0, size);
size = ips.read(data);
}
byte[] endBoundaryBytes = ("\r\n--" + boundary + "--\r\n")
.getBytes("UTF-8");
out.write(endBoundaryBytes);
return respProcess.processResponse(conn);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (out != null) {
out.close();
}
if (conn != null) {
conn.disconnect();
}
}
}
// public static String doPost(Proxy proxy, String url, String requestType,
// Map<String, String> params,
// Map<String, FileItem> fileParams, String charset, int connectTimeout, int
// readTimeout,
// Map<String, String> headerMap, ResponseProcess respProcess) throws
// IOException {
//
// String boundary = System.currentTimeMillis() + "";
// HttpURLConnection conn = null;
// OutputStream out = null;
// String rsp = null;
// try {
// try {
// String ctype = "multipart/form-data;boundary=" + boundary;
// conn = getConnection(proxy, new URL(url), requestType, ctype, headerMap);
// conn.setConnectTimeout(connectTimeout);
// conn.setReadTimeout(readTimeout);
// }
// catch (IOException e) {
// logger.error(url, e);
// throw e;
// }
//
// try {
// out = conn.getOutputStream();
//
// byte[] entryBoundaryBytes = ("\r\n--" + boundary +
// "\r\n").getBytes(charset);
//
// if (params != null) {
// // 文本
// Set<Entry<String, String>> textEntrySet = params.entrySet();
// for (Entry<String, String> textEntry : textEntrySet) {
// byte[] textBytes = getTextEntry(textEntry.getKey(), textEntry.getValue(),
// charset);
// out.write(entryBoundaryBytes);
// out.write(textBytes);
// }
// }
//
// // 文件
// if (fileParams != null) {
// Set<Entry<String, FileItem>> fileEntrySet = fileParams.entrySet();
// for (Entry<String, FileItem> fileEntry : fileEntrySet) {
// FileItem fileItem = fileEntry.getValue();
// if (fileItem.getContent() == null) {
// continue;
// }
// byte[] fileBytes = getFileEntry(fileEntry.getKey(),
// fileItem.getFileName(),
// fileItem.getMimeType(), charset);
// out.write(entryBoundaryBytes);
// out.write(fileBytes);
// out.write(fileItem.getContent());
// }
// }
//
// byte[] endBoundaryBytes = ("\r\n--" + boundary +
// "--\r\n").getBytes(charset);
// out.write(endBoundaryBytes);
// rsp = respProcess.processResponse(conn);
// }
// catch (IOException e) {
// logger.error(url, e);
// throw e;
// }
// }
// finally {
// if (out != null) {
// out.close();
// }
// if (conn != null) {
// conn.disconnect();
// }
// }
//
// return rsp;
// }
public static String doGet(Proxy proxy, String url, String charset,
ResponseProcess respProcess) throws IOException {
if (url == null) {
return "";
}
HttpURLConnection conn = null;
String rsp = null;
try {
String ctype = "application/x-www-form-urlencoded;charset="
+ charset;
conn = getConnection(proxy, new URL(url), "GET", ctype, null);
rsp = respProcess.processResponse(conn);
} catch (IOException e) {
logger.error(url, e);
throw e;
} finally {
if (conn != null) {
conn.disconnect();
}
}
return rsp;
}
private static class DefaultTrustManager implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
}
public static HttpURLConnection getConnection(Proxy proxy, URL url,
String method, String ctype, Map<String, String> headerMap)
throws IOException {
HttpURLConnection conn = null;
if ("https".equals(url.getProtocol())) {
SSLContext ctx = null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0],
new TrustManager[] { new DefaultTrustManager() },
new SecureRandom());
} catch (Exception e) {
throw new IOException(e);
}
HttpsURLConnection connHttps;
if (proxy != null) {
connHttps = (HttpsURLConnection) url.openConnection(proxy);
} else {
connHttps = (HttpsURLConnection) url.openConnection();
}
connHttps.setSSLSocketFactory(ctx.getSocketFactory());
connHttps.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
conn = connHttps;
} else {
if (proxy != null) {
conn = (HttpURLConnection) url.openConnection(proxy);
} else {
conn = (HttpURLConnection) url.openConnection();
}
}
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Accept",
"text/xml,text/javascript,text/html,application/json");
conn.setRequestProperty("User-Agent", "java");
conn.setRequestProperty("Content-Type", ctype);
if (headerMap != null) {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
return conn;
}
private static byte[] getTextEntry(String fieldName, String fieldValue,
String charset) throws IOException {
StringBuilder entry = new StringBuilder();
entry.append("Content-Disposition:form-data;name=\"");
entry.append(fieldName);
entry.append("\"\r\nContent-Type:text/plain\r\n\r\n");
entry.append(fieldValue);
return entry.toString().getBytes(charset);
}
private static byte[] getFileEntry(String fieldName, String fileName,
String mimeType, String charset) throws IOException {
StringBuilder entry = new StringBuilder();
entry.append("Content-Disposition:form-data;name=\"");
entry.append(fieldName);
entry.append("\";filename=\"");
entry.append(fileName);
entry.append("\"\r\nContent-Type:");
entry.append(mimeType);
entry.append("\r\n\r\n");
return entry.toString().getBytes(charset);
}
public static interface ResponseProcess {
String processResponse(HttpURLConnection conn);
};
public static String getMimeType(byte[] bytes) {
String suffix = getFileSuffix(bytes);
String mimeType;
if ("JPG".equals(suffix)) {
mimeType = "image/jpeg";
} else if ("GIF".equals(suffix)) {
mimeType = "image/gif";
} else if ("PNG".equals(suffix)) {
mimeType = "image/png";
} else if ("BMP".equals(suffix)) {
mimeType = "image/bmp";
} else {
mimeType = "application/octet-stream";
}
return mimeType;
}
/**
* 获取文件的真实后缀名。目前只支持JPG, GIF, PNG, BMP四种图片文件。
*
* @param bytes
* 文件字节流
* @return JPG, GIF, PNG or null
*/
public static String getFileSuffix(byte[] bytes) {
if (bytes == null || bytes.length < 10) {
return null;
}
if (bytes[0] == 'G' && bytes[1] == 'I' && bytes[2] == 'F') {
return "GIF";
} else if (bytes[1] == 'P' && bytes[2] == 'N' && bytes[3] == 'G') {
return "PNG";
} else if (bytes[6] == 'J' && bytes[7] == 'F' && bytes[8] == 'I'
&& bytes[9] == 'F') {
return "JPG";
} else if (bytes[0] == 'B' && bytes[1] == 'M') {
return "BMP";
} else {
return null;
}
}
public static byte[] readBytes(InputStream in) throws IOException {
byte[] temp = new byte[in.available()];
byte[] result = new byte[0];
int size = 0;
while ((size = in.read(temp)) != -1) {
byte[] readBytes = new byte[size];
System.arraycopy(temp, 0, readBytes, 0, size);
result = mergeArray(result,readBytes);
}
return result;
}
public static byte[] mergeArray(byte[]... a) {
// 合并完之后数组的总长度
int index = 0;
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum = sum + a[i].length;
}
byte[] result = new byte[sum];
for (int i = 0; i < a.length; i++) {
int lengthOne = a[i].length;
if(lengthOne==0){
continue;
}
// 拷贝数组
System.arraycopy(a[i], 0, result, index, lengthOne);
index = index + lengthOne;
}
return result;
}
}
3、图像处理工具
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
*
* 功能概要:图片处理工具类
*
* @author linbingwen
* @since 2016年3月30日
*/
public class ImageUtil {
/**
* 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
*
* @author linbingwen
* @since 2016年3月30日
* @param imgFilePath 图片路径
* @return base64编码的字符串
* @throws IOException
*/
public static String imageToBase64(String imgFilePath) throws IOException {
byte[] data = null;
InputStream in = null;
try {
in = new FileInputStream(imgFilePath);
data = new byte[in.available()]; // 读取图片字节数组
in.read(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
}
BASE64Encoder encoder = new BASE64Encoder();// 对字节数组Base64编码
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
}
/**
* 对字节数组字符串进行Base64解码并生成图片
*
* @author linbingwen
* @since 2016年3月30日
* @param imgStr base64编码的数据
* @param imgFilePath 要保存的图片路径
* @param imgFileName 要保存的图片名
* @return
* @throws IOException
*/
public static Boolean base64ToImage(String base64, String imgFilePath,String imgFileName) throws IOException {
if (base64 == null) {
return null;
}
BASE64Decoder decoder = new BASE64Decoder();
OutputStream out = null;
try {
byte[] bytes = decoder.decodeBuffer(base64);// Base64解码
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
}
}
InputStream input = new ByteArrayInputStream(bytes);
out = new FileOutputStream(imgFilePath + imgFileName);// 生成jpeg图片
out.write(bytes);
out.flush();
return true;
} catch (Exception e) {
return false;
} finally {
if (out != null) {
out.close();
}
}
}
/**
* 将base64编码的字符串转成InputStream
* @author linbingwen
* @since 2016年3月30日
* @param base64
* @return InputStream
*/
public static InputStream base64ToInputStream(String base64) {
if (base64 == null) {
return null;
}
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] bytes = decoder.decodeBuffer(base64);// Base64解码
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
}
}
InputStream input = new ByteArrayInputStream(bytes);
return input;
} catch (Exception e) {
return null;
}
}
/**
* 将网络图片进行Base64位编码
* @author linbingwen
* @since 2016年3月30日
* @param imageUrl 图片的url路径,如http://.....xx.jpg
* @return 返回Base64编码过的字节数组字符串
* @throws IOException
*/
public static String imageUrlToBase64(String imageUrl) throws IOException {
ByteArrayOutputStream outputStream = null;
try {
URL url = new URL(imageUrl);
BufferedImage bufferedImage = ImageIO.read(url);
outputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "jpg", outputStream);
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
outputStream.close();
}
}
BASE64Encoder encoder = new BASE64Encoder();// 对字节数组Base64编码
return encoder.encode(outputStream.toByteArray());
}
/**
*
* @author linbingwen
* @since 2016年4月13日
* @param imageUrl 图片url
* @param imageType 图片格式 如 jpg/bmp/png
* @return
* @throws IOException
*/
public static byte[] imageUrlToBytes(String imageUrl,String imageType) throws IOException {
ByteArrayOutputStream outputStream = null;
byte[] bytes = null;
try {
URL url = new URL(imageUrl);
BufferedImage bufferedImage = ImageIO.read(url);
outputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, imageType, outputStream);
bytes = outputStream.toByteArray();
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
outputStream.close();
}
}
return bytes;
}
public static void main(String[] args) throws IOException {
String imgFilePath = "D:\\";
String ttString = imageUrlToBase64("http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/25/CkvJolb5nIOAcHMZAADU5zn6AlI7014866");
base64ToImage(ttString, imgFilePath, "44.bmp");
urlBase64ToFile("http://10.75.201.68:8888/cfile/file/image?imageId=group2/M00/05/97/CkvJo1dxbqKAEBqzAARHjfpHsPk7518600");
}
/**
* @author linbingwen
* @since 2016年6月28日
* @param string
*/
private static void urlBase64ToFile(String string) {
}
}
4、JSON转换处理工具
/**
* 功能概要:java与json转换工具类
*
* @author linbingwen
* @since 2016年4月20日
*/
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import net.sf.json.util.JSONUtils;
import net.sf.json.xml.XMLSerializer;
public class JsonUtil {
private static String YYYY_MM_DD = "yyyy-MM-dd";
private static String YYYY_MM_DD_HH_MM_ss = "yyyy-MM-dd HH:mm:ss";
private static String HH_MM_ss = "HH-mm-ss";
private static String YYYYMMDD = "yyyyMMdd";
private static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
private static String HHMMss = "HHmmss";
/**
* 设置日期转换格式
*/
static {
//注册器
MorpherRegistry mr = JSONUtils.getMorpherRegistry();
//可转换的日期格式,即Json串中可以出现以下格式的日期与时间
DateMorpher dm = new DateMorpher(new String[] { YYYY_MM_DD,
YYYY_MM_DD_HH_MM_ss, HH_MM_ss, YYYYMMDD,
YYYYMMDDHHMMSS, HHMMss});
mr.registerMorpher(dm);
}
/**
* 从json串转换成实体对象
* @param jsonObjStr e.g. {'name':'get','dateAttr':'2009-11-12'}
* @param clazz Person.class
* @return
*/
public static Object getDtoFromJsonObjStr(String jsonObjStr, Class clazz) {
return JSONObject.toBean(JSONObject.fromObject(jsonObjStr), clazz);
}
/**
* 从json串转换成实体对象,并且实体集合属性存有另外实体Bean
* @param jsonObjStr e.g. {'data':[{'name':'get'},{'name':'set'}]}
* @param clazz e.g. MyBean.class
* @param classMap e.g. classMap.put("data", Person.class)
* @return Object
*/
public static Object getDtoFromJsonObjStr(String jsonObjStr, Class clazz, Map classMap) {
return JSONObject.toBean(JSONObject.fromObject(jsonObjStr), clazz, classMap);
}
/**
* 把一个json数组串转换成普通数组
* @param jsonArrStr e.g. ['get',1,true,null]
* @return Object[]
*/
public static Object[] getArrFromJsonArrStr(String jsonArrStr) {
return JSONArray.fromObject(jsonArrStr).toArray();
}
/**
* 把一个json数组串转换成实体数组
* @param jsonArrStr e.g. [{'name':'get'},{'name':'set'}]
* @param clazz e.g. Person.class
* @return Object[]
*/
public static Object[] getDtoArrFromJsonArrStr(String jsonArrStr, Class clazz) {
JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
Object[] objArr = new Object[jsonArr.size()];
for (int i = 0; i < jsonArr.size(); i++) {
objArr[i] = JSONObject.toBean(jsonArr.getJSONObject(i), clazz);
}
return objArr;
}
/**
* 把一个json数组串转换成实体数组,且数组元素的属性含有另外实例Bean
* @param jsonArrStr e.g. [{'data':[{'name':'get'}]},{'data':[{'name':'set'}]}]
* @param clazz e.g. MyBean.class
* @param classMap e.g. classMap.put("data", Person.class)
* @return Object[]
*/
public static Object[] getDtoArrFromJsonArrStr(String jsonArrStr, Class clazz,
Map classMap) {
JSONArray array = JSONArray.fromObject(jsonArrStr);
Object[] obj = new Object[array.size()];
for (int i = 0; i < array.size(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
obj[i] = JSONObject.toBean(jsonObject, clazz, classMap);
}
return obj;
}
/**
* 把一个json数组串转换成存放普通类型元素的集合
* @param jsonArrStr e.g. ['get',1,true,null]
* @return List
*/
public static List getListFromJsonArrStr(String jsonArrStr) {
JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
List list = new ArrayList();
for (int i = 0; i < jsonArr.size(); i++) {
list.add(jsonArr.get(i));
}
return list;
}
/**
* 把一个json数组串转换成集合,且集合里存放的为实例Bean
* @param jsonArrStr e.g. [{'name':'get'},{'name':'set'}]
* @param clazz
* @return List
*/
public static List getListFromJsonArrStr(String jsonArrStr, Class clazz) {
JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
List list = new ArrayList();
for (int i = 0; i < jsonArr.size(); i++) {
list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz));
}
return list;
}
/**
* 把一个json数组串转换成集合,且集合里的对象的属性含有另外实例Bean
* @param jsonArrStr e.g. [{'data':[{'name':'get'}]},{'data':[{'name':'set'}]}]
* @param clazz e.g. MyBean.class
* @param classMap e.g. classMap.put("data", Person.class)
* @return List
*/
public static List getListFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap) {
JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
List list = new ArrayList();
for (int i = 0; i < jsonArr.size(); i++) {
list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz, classMap));
}
return list;
}
/**
* 把json对象串转换成map对象
* @param jsonObjStr e.g. {'name':'get','int':1,'double',1.1,'null':null}
* @return Map
*/
public static Map getMapFromJsonObjStr(String jsonObjStr) {
JSONObject jsonObject = JSONObject.fromObject(jsonObjStr);
Map map = new HashMap();
for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
String key = (String) iter.next();
map.put(key, jsonObject.get(key));
}
return map;
}
/**
* 把json对象串转换成map对象,且map对象里存放的为其他实体Bean
* @param jsonObjStr e.g. {'data1':{'name':'get'},'data2':{'name':'set'}}
* @param clazz e.g. Person.class
* @return Map
*/
public static Map getMapFromJsonObjStr(String jsonObjStr, Class clazz) {
JSONObject jsonObject = JSONObject.fromObject(jsonObjStr);
Map map = new HashMap();
for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
String key = (String) iter.next();
map.put(key, JSONObject.toBean(jsonObject.getJSONObject(key), clazz));
}
return map;
}
/**
* 把json对象串转换成map对象,且map对象里存放的其他实体Bean还含有另外实体Bean
* @param jsonObjStr e.g. {'mybean':{'data':[{'name':'get'}]}}
* @param clazz e.g. MyBean.class
* @param classMap e.g. classMap.put("data", Person.class)
* @return Map
*/
public static Map getMapFromJsonObjStr(String jsonObjStr, Class clazz, Map classMap) {
JSONObject jsonObject = JSONObject.fromObject(jsonObjStr);
Map map = new HashMap();
for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
String key = (String) iter.next();
map.put(key, JSONObject
.toBean(jsonObject.getJSONObject(key), clazz, classMap));
}
return map;
}
/**
* 把实体Bean、Map对象、数组、列表集合转换成Json串
* @param obj
* @return
* @throws Exception String
*/
public static String getJsonStr(Object obj) {
String jsonStr = null;
//Json配置
// JsonConfig jsonCfg = new JsonConfig();
//
// //注册日期处理器
// jsonCfg.registerJsonValueProcessor(java.util.Date.class,
// new JsonDateValueProcessor(YYYY_MM_DD_HH_MM_ss));
if (obj == null) {
return "{}";
}
if (obj instanceof Collection || obj instanceof Object[]) {
jsonStr = JSONArray.fromObject(obj).toString();
} else {
jsonStr = JSONObject.fromObject(obj).toString();
}
return jsonStr;
}
/**
* 把json串、数组、集合(collection map)、实体Bean转换成XML
* XMLSerializer API:
* http://json-lib.sourceforge.net/apidocs/net/sf/json/xml/XMLSerializer.html
* 具体实例请参考:
* http://json-lib.sourceforge.net/xref-test/net/sf/json/xml/TestXMLSerializer_writes.html
* http://json-lib.sourceforge.net/xref-test/net/sf/json/xml/TestXMLSerializer_writes.html
* @param obj
* @return
* @throws Exception String
*/
public static String getXMLFromObj(Object obj) {
XMLSerializer xmlSerial = new XMLSerializer();
//Json配置
JsonConfig jsonCfg = new JsonConfig();
//注册日期处理器
jsonCfg.registerJsonValueProcessor(java.util.Date.class,
new JsonDateValueProcessor(YYYY_MM_DD_HH_MM_ss));
if ((String.class.isInstance(obj) && String.valueOf(obj).startsWith("["))
|| obj.getClass().isArray() || Collection.class.isInstance(obj)) {
JSONArray jsonArr = JSONArray.fromObject(obj, jsonCfg);
return xmlSerial.write(jsonArr);
} else {
JSONObject jsonObj = JSONObject.fromObject(obj, jsonCfg);
return xmlSerial.write(jsonObj);
}
}
/**
* 从XML转json串
* @param xml
* @return String
*/
public static String getJsonStrFromXML(String xml) {
XMLSerializer xmlSerial = new XMLSerializer();
return String.valueOf(xmlSerial.read(xml));
}
}
/**
*
* 功能概要:json日期值处理器实现
*
* @author linbingwen
* @since 2016年4月20日
*/
class JsonDateValueProcessor implements JsonValueProcessor {
private String format ="yyyy-MM-dd HH-mm-ss";
public JsonDateValueProcessor() {
}
public JsonDateValueProcessor(String format) {
this.format = format;
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value, jsonConfig);
}
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
return process(value, jsonConfig);
}
private Object process(Object value, JsonConfig jsonConfig) {
if (value instanceof Date) {
String str = new SimpleDateFormat(format).format((Date) value);
return str;
}
return value == null ? null : value.toString();
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
}
5、邮件发送处理工具
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MailSendUtil {
private static Logger logger = LoggerFactory.getLogger(MailSendUtil.class);
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private boolean needAuth = false; // smtp是否需要认证
private String username; // smtp认证用户名
private String password; // smtp认证用户密码
private Multipart mp; // 含标题,邮件内容,附件
/**
* Constructor
*
* @param smtp
* 邮件发送服务器
*/
public MailSendUtil(String smtp) {
setSmtpHost(smtp);
createMimeMessage();
}
/**
* 设置邮件发送服务器
*
* @param hostName
* String
*/
public void setSmtpHost(String hostName) {
logger.info("设置系统属性:mail.smtp.host = " + hostName);
if (props == null)
props = System.getProperties(); // 获得系统属性对象
props.put("mail.smtp.host", hostName); // 设置SMTP主机
}
/**
* 创建MIME邮件对象
*
* @return
*/
public boolean createMimeMessage() {
try {
logger.info("准备获取邮件会话对象!");
session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});// 获得邮件会话对象
}
catch (Exception e) {
logger.error("获取邮件会话对象时发生错误!" + e);
return false;
}
logger.info("准备创建MIME邮件对象!");
try {
mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
mp = new MimeMultipart();
return true;
}
catch (Exception e) {
logger.error("创建MIME邮件对象失败!" + e);
return false;
}
}
/**
* 设置SMTP是否需要验证
*
* @param need
*/
public void setNeedAuth(boolean need) {
logger.info("设置smtp身份认证:mail.smtp.auth = " + need);
if (props == null)
props = System.getProperties();
if (need) {
props.put("mail.smtp.auth", "true");
}
else {
props.put("mail.smtp.auth", "false");
}
}
/**
* 设置用户名和密码
*
* @param name
* @param pass
*/
public void setNamePass(String name, String pass) {
username = name;
password = pass;
}
/**
* 设置邮件主题
*
* @param mailSubject
* @return
*/
public boolean setSubject(String mailSubject) {
logger.info("设置邮件主题!");
try {
mimeMsg.setSubject(mailSubject);
return true;
}
catch (Exception e) {
logger.error("设置邮件主题发生错误!");
return false;
}
}
/**
* 设置邮件正文
*
* @param mailBody
* String
*/
public boolean setBody(String mailBody) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent("" + mailBody, "text/html;charset=GBK");
mp.addBodyPart(bp);
return true;
}
catch (Exception e) {
logger.error("设置邮件正文时发生错误!" + e);
return false;
}
}
/**
* 添加附件
*
* @param filename
* String
*/
public boolean addFileAffix(String filename) {
if (filename == null) {
return true;
}
logger.info("增加邮件附件:" + filename);
try {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(MimeUtility.encodeText(fileds.getName()));
mp.addBodyPart(bp);
return true;
}
catch (Exception e) {
logger.error("增加邮件附件:" + filename + "发生错误!" + e);
return false;
}
}
/**
* 设置发信人
*
* @param from
* String
*/
public boolean setFrom(String from) {
logger.info("设置发信人!");
try {
mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
return true;
}
catch (Exception e) {
return false;
}
}
/**
* 设置收信人
*
* @param to
* String
*/
public boolean setTo(String to) {
logger.info("设置收件人:" + to);
if (to == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
return true;
}
catch (Exception e) {
return false;
}
}
/**
* 设置抄送人
*
* @param copyto
* String
*/
public boolean setCopyTo(String copyto) {
if (copyto == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress.parse(copyto));
return true;
}
catch (Exception e) {
return false;
}
}
/**
* 发送邮件
*/
public boolean sendOut() {
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
logger.info("正在发送邮件....");
Transport transport = session.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"), username, password);
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
// transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
// Transport.send(mimeMsg);
logger.info("发送邮件成功!");
transport.close();
return true;
}
catch (Exception e) {
logger.error("邮件发送失败!" + e);
return false;
}
}
/**
* 调用sendOut方法完成邮件发送
*
* @param smtp
* @param from
* @param to
* @param subject
* @param content
* @param username
* @param password
* @return boolean
*/
public static boolean send(String smtp, String from, String to, String subject, String content, String username, String password) {
MailSendUtil theMail = new MailSendUtil(smtp);
theMail.setNeedAuth(true); // 需要验证
if (!theMail.setSubject(subject))
return false;
if (!theMail.setBody(content))
return false;
if (!theMail.setTo(to))
return false;
if (!theMail.setFrom(from))
return false;
theMail.setNamePass(username, password);
if (!theMail.sendOut())
return false;
return true;
}
/**
* 调用sendOut方法完成邮件发送,带抄送
*
* @param smtp
* @param from
* @param to
* @param copyto
* @param subject
* @param content
* @param username
* @param password
* @return boolean
*/
public static boolean sendAndCc(String smtp, String from, String to, String copyto, String subject, String content, String username, String password) {
MailSendUtil theMail = new MailSendUtil(smtp);
theMail.setNeedAuth(true); // 需要验证
if (!theMail.setSubject(subject))
return false;
if (!theMail.setBody(content))
return false;
if (!theMail.setTo(to))
return false;
if (!theMail.setCopyTo(copyto))
return false;
if (!theMail.setFrom(from))
return false;
theMail.setNamePass(username, password);
if (!theMail.sendOut())
return false;
return true;
}
/**
* 调用sendOut方法完成邮件发送,带附件
*
* @param smtp
* @param from
* @param to
* @param subject
* @param content
* @param username
* @param password
* @param filename
* 附件路径
* @return
*/
public static boolean send(String smtp, String from, String to, String subject, String content, String username, String password, String filename) {
MailSendUtil theMail = new MailSendUtil(smtp);
theMail.setNeedAuth(true); // 需要验证
logger.info("发送邮件至:{} " + to);
if (!theMail.setSubject(subject))
return false;
if (!theMail.setBody(content))
return false;
if (!theMail.addFileAffix(filename))
return false;
if (!theMail.setTo(to))
return false;
if (!theMail.setFrom(from))
return false;
theMail.setNamePass(username, password);
if (!theMail.sendOut())
return false;
return true;
}
/**
* 调用sendOut方法完成邮件发送,带附件和抄送
*
* @param smtp
* @param from
* @param to
* @param copyto
* @param subject
* @param content
* @param username
* @param password
* @param filename
* @return
*/
public static boolean sendAndCc(String smtp, String from, String to, String copyto, String subject, String content, String username, String password, String filename) {
MailSendUtil theMail = new MailSendUtil(smtp);
theMail.setNeedAuth(true); // 需要验证
if (!theMail.setSubject(subject))
return false;
if (!theMail.setBody(content))
return false;
if (!theMail.addFileAffix(filename))
return false;
if (!theMail.setTo(to))
return false;
if (!theMail.setCopyTo(copyto))
return false;
if (!theMail.setFrom(from))
return false;
theMail.setNamePass(username, password);
if (!theMail.sendOut())
return false;
return true;
}
public static void main(String[] args) {
String smtp = "10.75.210.10";
String from = "test1@xxxxx";
String to = "liuqiuyun@xxxx";
String subject = "管理系统";
String content = "邮件内容";
String username = "test1";
String password = "Password1";
String filename = "D:\\file\\ces\\INT_MMS_SETTLE_20150211_0001.DATA";
try {
MailSendUtil.send(smtp, from, to, subject, content, username, password, filename);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
6、SFTP处理工具
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Vector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import com.lz.lsf.exception.BusinessException;
/**
*
* 功能概要:SFTP客户端
*
* @author linbingwen
* @since 2015年8月5日
*/
public class SftpClient {
private String m_host = "127.0.0.1";
private int m_port = 22;
private String m_username = "ctsUser";
private String m_password = "ctsUser";
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Channel m_channel = null;
public SftpClient(String host, int Port, String userName, String password) {
this.m_host = host;
this.m_port = Port;
this.m_username = userName;
this.m_password = password;
}
public void reConnect() {
try {
this.connect();
}
catch (Exception e) {
logger.warn("m_channel disconnect fail!", e);
}
}
public void connect() {
JSch jsch = new JSch();
try {
jsch.getSession(m_username, m_host, m_port);
Session sshSession = jsch.getSession(m_username, m_host, m_port);
logger.info("username:" + m_username + ", host:" + m_host + ",port:" + m_port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
sshSession.setConfig(config);
logger.debug("StrictHostKeyChecking", "no");
sshSession.setPassword(m_password);
sshSession.connect();
logger.debug("Session connected.");
m_channel = sshSession.openChannel("sftp");
logger.debug("Opening Channel.");
m_channel.connect();
logger.info("Connected to {} success! ", m_host);
}
catch (JSchException e) {
logger.error("connected to " + m_host + "Fail! ");
throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL, e, "connected to " + m_host + "Fail! ");
}
}
public void disConnect() {
try {
if (m_channel == null)
return;
synchronized (m_channel) {
if (m_channel.getSession().isConnected())
m_channel.getSession().disconnect();
}
m_channel.disconnect();
}
catch (JSchException e) {
logger.warn("m_channel disconnect fail!", e);
}
finally {
if (m_channel != null)
m_channel = null;
}
}
public boolean isTryConnect() {
int tryConnectCount = 0;
try {
while (true) {
tryConnectCount++;
if (m_channel.getSession().isConnected())
return true;
else {
if (tryConnectCount >= 3)
return false;
else {
this.reConnect();
}
}
}
}
catch (JSchException e) {
logger.warn("m_channel isConnected fail!", e);
return false;
}
}
/**
* 上传文件
*
* @param directoryName
* 上传的目录
* @param uploadFileName
* 要上传的文件
* @param sftp
* @throws SftpException
* @throws FileNotFoundException
* @throws JSchException
*/
public void upload(String remotePathDirName, String uploadFileName) {
ChannelSftp sftp = (ChannelSftp) m_channel;
if (!this.isTryConnect()) {
logger.error("尝试连接SFTP服务器失败!");
throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL);
}
try {
sftp.cd(remotePathDirName);
File uploadFile = new File(uploadFileName);
sftp.put(new FileInputStream(uploadFile), uploadFile.getName());
logger.debug("Upload file:{} to remote dir:{}", uploadFileName, remotePathDirName);
}
catch (FileNotFoundException e) {
logger.error("download remote path({})FileNotFound{}", remotePathDirName, uploadFileName);
throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "FileNotFound:" + uploadFileName);
}
catch (SftpException e) {
logger.error("download remote path({}) not exists!{}", remotePathDirName, e);
throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "remote path:" + remotePathDirName);
}
}
public void uploadBatch(String directoryName, List<String> fileNameList) {
for (String fileName : fileNameList) {
this.upload(directoryName, fileName);
}
}
/**
* 下载文件
*
* @param directoryName
* 下载目录
* @param downloadFileName
* 下载的文件
* @param saveFileName
* 存在本地的路径
* @param sftp
* @throws SftpException
* @throws FileNotFoundException
* @throws JSchException
*/
public void download(String remotePathDirName, String localPathDirName, String downloadFileName) {
ChannelSftp sftp = (ChannelSftp) m_channel;
if (!this.isTryConnect()) {
logger.error("尝试连接SFTP服务器失败!");
// throw new BusinessException(ActErrorCode.ERROR_CONNECT_SFTP_FAIL);
}
try {
sftp.cd(remotePathDirName);
File saveFile = new File(localPathDirName + "//" + downloadFileName);
sftp.get(downloadFileName, new FileOutputStream(saveFile));
logger.debug("Download file:{} save as {}", downloadFileName, localPathDirName + "//" + downloadFileName);
}
catch (FileNotFoundException e) {
e.printStackTrace();
logger.error("download remote path{}//{}", remotePathDirName, downloadFileName);
throw new BusinessException(CommonErrorCode.NOT_FINDFIELS_REMOTE_PATH, e, "FileNotFound:" + downloadFileName);
}
catch (SftpException e) {
logger.error("download remote path({}) fail!{}", remotePathDirName + downloadFileName, e);
throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "remote path:" + remotePathDirName);
}
}
public void downloadBatch(String directoryName, String localPathDirName, List<String> downloadFileNameList) {
for (String fileName : downloadFileNameList) {
this.download(directoryName, localPathDirName, fileName);
}
}
public boolean isFileExists(String remotePathDirName) {
ChannelSftp sftp = (ChannelSftp) m_channel;
if (!this.isTryConnect()) {
logger.error("尝试连接SFTP服务器失败!");
throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL);
}
try {
Vector<LsEntry> filesName = sftp.ls(remotePathDirName);
return filesName.size() > 0;
}
catch (SftpException e) {
logger.warn("download remote path({}) not exists!{}", remotePathDirName, e);
return false;
}
}
/**
* 删除文件
*
* @param directory
* 要删除文件所在目录
* @param deleteFileName
* 要删除的文件
* @param sftp
* @throws SftpException
* @throws JSchException
*/
public void delete(String directory, String deleteFileName) throws SftpException, JSchException {
ChannelSftp sftp = (ChannelSftp) m_channel;
if (!this.isTryConnect()) {
logger.error("尝试连接SFTP服务器失败!");
throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL);
}
sftp.cd(directory);
sftp.rm(deleteFileName);
logger.info("Delete file:{} from remote dir:{}", deleteFileName, directory);
}
/**
* 列出目录下的文件
*
* @param directoryName
* 要列出的目录
* @param sftp
* @return
* @throws SftpException
* @throws JSchException
*/
@SuppressWarnings("unchecked")
public Vector<LsEntry> listFiles(String directoryName) throws SftpException, JSchException {
ChannelSftp sftp = (ChannelSftp) m_channel;
if (!this.isTryConnect()) {
logger.error("尝试连接SFTP服务器失败!");
throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL);
}
Vector<LsEntry> filesName = sftp.ls(directoryName);
return filesName;
}
/**
* 列出目录下符合要求的文件
*
* @param directoryName
* 要列出的目录
* @param reg
* 文件名前缀
* @param postfix
* 文件名后缀(格式)
* @return
* @throws SftpException
* @throws JSchException
*/
@SuppressWarnings("unchecked")
public Vector<LsEntry> listFiles(String remotePathDirName, String reg, String postfix) {
ChannelSftp sftp = (ChannelSftp) m_channel;
if (!this.isTryConnect()) {
logger.error("尝试连接SFTP服务器失败!");
throw new BusinessException(CommonErrorCode.ERROR_CONNECT_SFTP_FAIL);
}
Vector<LsEntry> filesName;
try {
filesName = sftp.ls(remotePathDirName);
Vector<LsEntry> filterFilesName = new Vector<LsEntry>();
for (LsEntry lsEntry : filesName) {
if (lsEntry.getFilename().indexOf(reg) > -1 && lsEntry.getFilename().endsWith(postfix)) {
filterFilesName.add(lsEntry);
}
}
return filterFilesName;
}
catch (SftpException e) {
logger.error("download remote path({}) not exists!{}", remotePathDirName, e);
throw new BusinessException(CommonErrorCode.NOT_EXISTS_PATH_SFTP_REMOTE, e, "remote path" + remotePathDirName);
}
}
}
7、class工具
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.beanutils.BeanUtils;
import com.lz.lsf.util.StringUtil;
public class ClassUtil {
static Set<Class> privateTypes = new HashSet<Class>();
static {
privateTypes.add(int.class);
privateTypes.add(double.class);
privateTypes.add(long.class);
privateTypes.add(float.class);
privateTypes.add(boolean.class);
privateTypes.add(Integer.class);
privateTypes.add(Double.class);
privateTypes.add(Long.class);
privateTypes.add(Float.class);
privateTypes.add(String.class);
privateTypes.add(Date.class);
privateTypes.add(Boolean.class);
}
public static Class<?> getFieldGenricType(Field field, int index) {
String signature = field.toGenericString();
return getGenericeType(signature, index);
}
private static Class<?> getGenericeType(String signature, int index) {
String genericStr = signature.substring(signature.indexOf("<") + 1, signature.indexOf(">"));
String[] types = genericStr.split(",");
if (types.length > 0 && types.length > index) {
try {
return Class.forName(types[index]);
}
catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
else {
return null;
}
}
/**
* 通过反射, 获得定义Class时声明的父类的泛型参数的类型. 如无法找到, 返回Object.class.
*
* @param clazz
* clazz The class to introspect
* @param index
* the Index of the generic ddeclaration,start from 0.
* @return the index generic declaration, or Object.class if cannot be determined
*/
@SuppressWarnings("unchecked")
public static Class<?> getSuperClassGenricType(final Class clazz, final int index) {
Class<?> ret = null;
// 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
Type genType = clazz.getGenericSuperclass();
ret = getGenericType(genType, index);
if (ret == null) {
for (Type t : clazz.getGenericInterfaces()) {
ret = getGenericType(t, index);
if (ret != null) {
break;
}
}
}
return ret;
}
private static Class<?> getGenericType(Type type, int index) {
if (!(type instanceof ParameterizedType)) {
return null;
}
// 返回表示此类型实际类型参数的 Type 对象的数组。
Type[] params = ((ParameterizedType) type).getActualTypeArguments();
if (index >= params.length || index < 0) {
return null;
}
if (!(params[index] instanceof Class)) {
return null;
}
return (Class) params[index];
}
public static String getSetterMethod(String attrName) {
String fst = attrName.substring(0, 1).toUpperCase();
attrName = fst + attrName.substring(1);
return "set" + attrName;
}
public static void setObjectValue(Object obj, String fieldName, Object value) {
try {
String methodName = getSetterMethod(fieldName);
Method method = findMethod(obj.getClass(), methodName, String.class);
if (method != null) {
method.invoke(obj, value);
}
else {
Field field = obj.getClass().getDeclaredField(fieldName);
if (field != null) {
field.setAccessible(true);
field.set(obj, value);
}
else {
throw new RuntimeException("no field or set method found for field:" + fieldName);
}
}
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public static boolean isPriovateType(Class type) {
return privateTypes.contains(type);
}
public static Object getPrivateTypeValue(Class type, String value) {
if (String.class == type) {
return value;
}
else if (int.class == type) {
return StringUtil.isEmpty(value) ? 0 : Integer.parseInt(value);
}
else if (double.class == type) {
return StringUtil.isEmpty(value) ? 0 : Double.parseDouble(value);
}
else if (long.class == type) {
return StringUtil.isEmpty(value) ? 0 : Long.parseLong(value);
}
else if (float.class == type) {
return StringUtil.isEmpty(value) ? 0 : Float.parseFloat(value);
}
else if (Integer.class == type) {
return StringUtil.isEmpty(value) ? 0 : Integer.valueOf(value);
}
else if (Double.class == type) {
return StringUtil.isEmpty(value) ? 0 : Double.valueOf(value);
}
else if (Long.class == type) {
return StringUtil.isEmpty(value) ? 0 : Long.valueOf(value);
}
else if (Float.class == type) {
return StringUtil.isEmpty(value) ? 0 : Float.valueOf(value);
}
else if (BigDecimal.class == type) {
return StringUtil.isEmpty(value) ? BigDecimal.ZERO : BigDecimal.valueOf(Double.valueOf(value));
}
else if (boolean.class == type || Boolean.class == type) {
return StringUtil.isEmpty(value) ? false : Boolean.valueOf(value);
}
else {
return null;
}
}
public static void main(String[] args) {
System.out.println( Boolean.valueOf("true"));
System.out.println( Boolean.valueOf("false"));
String[] sp = "|1|2|||| ".split("\\|");
System.out.println(sp);
System.out.println("|1|2||||".endsWith("|"));
}
public static Method findMethod(Class<?> clazz, String methodName, Class<?> paramType) {
Method ret = null;
try {
ret = clazz.getMethod(methodName, paramType);
}
catch (Exception e) {
if (paramType.getSuperclass() != null) {
ret = findMethod(clazz, methodName, paramType.getSuperclass());
}
if (ret == null) {
for (Class _clazz : paramType.getInterfaces()) {
ret = findMethod(clazz, methodName, _clazz);
if (ret != null) {
break;
}
}
}
}
return ret;
}
@SuppressWarnings("unchecked")
public static <T> T cloneInstance(T obj) {
T ret;
try {
ret = (T) BeanUtils.cloneBean(obj);
}
catch (Exception e) {
throw new RuntimeException("clone instance failed!", e);
}
return ret;
}
}
8、GET/POST请求工具
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Consts;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HttpClientUtil {
static CookieStore cookieStore = null;
private static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("pageIndex", "1");
map.put("pageSize", "20");
String result = HttpClientUtil.post("http://xxxxx/xxx/operator/menu/findByPage.json", map);
logger.info("post result:" + result);
map = new HashMap<String, String>();
map.put("pageNumber", "1");
map.put("pageSize", "20");
result = HttpClientUtil.get("http://xxx/ftc-ump-mid/xxx/dict/condition.json", map);
logger.info("get result:" + result);
}
@Test
public void postTest() {
Map<String, String> map = new HashMap<String, String>();
map.put("pageIndex", "1");
map.put("pageSize", "20");
String result = HttpClientUtil.post("http:/xxxxx/findByPage.json", map);
logger.info("result:" + result);
}
@Test
public void getTest() {
Map<String, String> map = new HashMap<String, String>();
map.put("pageNumber", "1");
map.put("pageSize", "20");
String result = HttpClientUtil.get("http://xxxxor/dict/condition.json", map);
logger.info("result:" + result);
}
/**
* 获取cookie的内容
*
* @param ck
* @param name
* @return
*/
public static String retriveCkValue(String ck, String name) {
if (StringUtils.isBlank(ck) || StringUtils.isBlank(name)) {
return "";
}
final String delimChar = name + "=";
int delimBegin = ck.indexOf(delimChar);
if (delimBegin < 0) {
return "";
}
String val = null;
int delimEnd = ck.indexOf(';', delimBegin);
if (delimEnd < 0) {
val = ck.substring(delimBegin + delimChar.length()).trim();
} else {
val = ck.substring(delimBegin + delimChar.length(), delimEnd).trim();
}
int idx = val.indexOf('?');
if (idx > 0) {
val = val.substring(0, idx);
}
return val;
}
/**
* 将cookie保存到静态变量中供后续调用
*
* @param httpResponse
*/
public static void setCookieStore(HttpResponse httpResponse) {
logger.info("-------setCookieStore---------");
if (httpResponse.getFirstHeader("Set-Cookie") != null) {
cookieStore = new BasicCookieStore();
org.apache.http.Header[] cookies = httpResponse.getHeaders("Set-Cookie");
// Expires=Fri, 14-Apr-2017 09:42:26 GMT;
for (int j = 0; j < cookies.length; j++) {
String content = cookies[j].getValue();
String cookName = content.substring(0, content.indexOf("="));
String cookNameContent = retriveCkValue(content, cookName);
String domain = retriveCkValue(content, "Domain");
String path = retriveCkValue(content, "Path");
String time = retriveCkValue(content, "Expires");
Date expires = new Date(time);
BasicClientCookie cookie = new BasicClientCookie(cookName, cookNameContent);
cookie.setDomain(domain);
cookie.setPath(path);
cookie.setExpiryDate(expires);
cookieStore.addCookie(cookie);
logger.info(cookName + ":{},domain:{},path:{},expires", cookNameContent, domain, path, expires);
}
}
}
/**
* 模拟登陆
*
* @param client
* @return
*/
private static String login(CloseableHttpClient client) {
String path = "http://xxxxxx/operator.json";
Map<String, String> params = new HashMap<String, String>();
params.put("userId", "ITADMIN2");
params.put("password", "123456");
List<NameValuePair> list = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
HttpResponse httpResponse = null;
try {
// 实现将请求的参数封装到表单中,即请求体中
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, Consts.UTF_8);
// 使用post方式提交数据
HttpPost httpPost = new HttpPost(path);
int connectionTimeout = 15000;
int soTimeout = 15000;
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout).setSocketTimeout(soTimeout).build();
httpPost.setConfig(requestConfig);
httpPost.setEntity(entity);
httpResponse = client.execute(httpPost);
// 获取服务器端返回的状态码和输入流,将输入流转换成字符串
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// setCookieStore(httpResponse); // 设置cookie
return EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpResponse != null) {
try {
EntityUtils.consume(httpResponse.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "";
}
/**
* 模拟get
*
* @param path
* @param params
* @param encode
* @return
*/
public static String get(String path, Map<String, String> params) {
List<NameValuePair> list = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
HttpResponse httpResponse = null;
CloseableHttpClient client = null;
try {
// 实现将请求的参数封装到表单中,即请求体中
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, Consts.UTF_8);
// 转换为键值对
String str = EntityUtils.toString(entity);
// 使用get方式提交数据
HttpGet httpGet = new HttpGet(path + "?" + str);
int connectionTimeout = 15000;
int soTimeout = 15000;
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout).setSocketTimeout(soTimeout).build();
httpGet.setConfig(requestConfig);
// 执行get请求,并获取服务器端的响应HttpResponse
client = HttpClients.createDefault();
// if (cookieStore != null) {
// client =
// HttpClients.custom().setDefaultCookieStore(cookieStore).build();
// } else {
// client = HttpClients.createDefault();
// login(client);
// }
login(client);
httpResponse = client.execute(httpGet);
// 获取服务器端返回的状态码和输入流,将输入流转换成字符串
if (httpResponse.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpResponse != null) {
try {
EntityUtils.consume(httpResponse.getEntity());
} catch (IOException e) {
logger.error("", e);
}
}
if (client != null) {
try {
client.close();
} catch (IOException e) {
logger.error("", e);
}
}
}
return "";
}
/**
* 模拟post
*
* @param path
* @param params
* @param encode
* @return
*/
public static String post(String path, Map<String, String> params) {
List<NameValuePair> list = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
HttpResponse httpResponse = null;
CloseableHttpClient client = null;
try {
// 实现将请求的参数封装到表单中,即请求体中
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "utf-8");
// 使用post方式提交数据
HttpPost httpPost = new HttpPost(path);
int connectionTimeout = 15000;
int soTimeout = 15000;
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectionTimeout).setSocketTimeout(soTimeout).build();
httpPost.setConfig(requestConfig);
httpPost.setEntity(entity);
// 执行post请求,并获取服务器端的响应HttpResponse
HttpClients.createDefault();
login(client);
// if (cookieStore != null) {
// client =
// HttpClients.custom().setDefaultCookieStore(cookieStore).build();
// } else {
// client = HttpClients.createDefault();
// login(client);
// }
httpResponse = client.execute(httpPost);
// 获取服务器端返回的状态码和输入流,将输入流转换成字符串
if (httpResponse.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(httpResponse.getEntity(), "utf-8");
}
} catch (Exception e) {
logger.error("", e);
} finally {
if (httpResponse != null) {
try {
EntityUtils.consume(httpResponse.getEntity());
} catch (IOException e) {
logger.error("", e);
}
}
if (client != null) {
try {
client.close();
} catch (IOException e) {
logger.error("", e);
}
}
}
return "";
}
}
9、ES处理工具
import com.alibaba.fastjson.JSONObject;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.count.CountRequestBuilder;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.action.delete.DeleteRequestBuilder;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.lang3.StringUtils;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ESClient {
private static final Logger log = LoggerFactory.getLogger(ESClient.class);
private TransportClient client;
public ESClient() {
this.init();
}
private void close() {
if (this.client != null) {
this.client.close();
}
}
@Override
public void finalize() throws Throwable {
this.close();
super.finalize();
}
private void init() {
try {
Settings settings = ImmutableSettings.settingsBuilder().loadFromClasspath("elasticsearch.yml")
.put("client.transport.sniff", true).build();
this.client = new TransportClient(settings);
int port = settings.getAsInt("client.transport.port", 9900);
String[] ips = settings.getAsArray("client.transport.ip");
for (String ip : ips) {
log.info("the ip is:" + ip);
client.addTransportAddress(new InetSocketTransportAddress(ip, port));
}
log.info("es连接成功:{},{}", client, JSONObject.toJSONString(client.listedNodes()));
} catch (Exception e) {
if (client != null) {
client.close();
}
log.error("连接es失败!", e);
}
}
public void createIndex(String index) throws Exception {
client.admin().indices().prepareCreate(index).execute().actionGet();
}
/**
* 为一种类型建立mapping
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param builder mapping内容, 格式 { "properties": { "fieldName1": { "type":
* "string", "analyzer": "ik" }, "fieldName2": { "type":
* "string", "index": "not_analyzed" } } }
*/
public void mappingDoc(String index, String type, XContentBuilder builder)
throws Exception {
// XContentBuilder builder = XContentFactory.jsonBuilder()
// .startObject()
// .startObject("properties")
// .startObject("province")
// .field("type", "string")
// //.field("store", "yes")
// .field("analyzer","ik")
// .field("index","analyzed")
// //.field("indexAnalyzer", "ik")
// //.field("searchAnalyzer", "ik")
// .endObject()
// .endObject()
// .endObject();
PutMappingRequest mapping = Requests.putMappingRequest(index)
.type(type).source(builder);
client.admin().indices().putMapping(mapping).actionGet();
}
/**
* 为一份文档建立索引,采用自生成id
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param json json格式的数据集
* @return
*/
public IndexResponse indexDoc(String index, String type, String json) throws Exception {
IndexRequestBuilder builder = client.prepareIndex(index, type);
IndexResponse response = builder.setSource(json)
.execute()
.actionGet();
return response;
}
/**
* 为一份文档建立索引,采用自生成id
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param kvMap 键值对形式的数据集
* @return
*/
public IndexResponse indexDoc(String index, String type, Map<String, Object> kvMap)
throws Exception {
IndexRequestBuilder builder = client.prepareIndex(index, type);
IndexResponse response = builder.setSource(kvMap)
.execute()
.actionGet();
return response;
}
/**
* 为一份文档建立索引
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param id 文档id
* @param json json格式的数据集
* @return
*/
public IndexResponse indexDoc(String index, String type, String id, String json)
throws Exception {
IndexRequestBuilder builder = client.prepareIndex(index, type, id);
IndexResponse response = builder.setSource(json)
.execute()
.actionGet();
return response;
}
/**
* 为一份文档建立索引
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param id 文档id
* @param kvMap 键值对形式的数据集
* @return
*/
public IndexResponse indexDoc(String index, String type, String id, Map<String, Object> kvMap)
throws Exception {
IndexRequestBuilder builder = client.prepareIndex(index, type, id);
IndexResponse response = builder.setSource(kvMap)
.execute()
.actionGet();
return response;
}
/**
* 为多份文档建立索引,采用自生成id
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param jsonList json格式的文档数据: List<json>
* @return
*/
public BulkResponse batchIndexDocsForJson(String index, String type, List<String> jsonList)
throws Exception {
if (jsonList.isEmpty()) {
throw new Exception("批量创建索引时,传入的参数'jsonList'为空!");
}
List<IndexRequest> requestList = new ArrayList<IndexRequest>(jsonList.size());
for (String json : jsonList) {
IndexRequest request = client.prepareIndex(index, type)
.setSource(json)
.request();
requestList.add(request);
}
BulkRequestBuilder bulkRequest = client.prepareBulk();
for (IndexRequest request : requestList) {
bulkRequest.add(request);
}
BulkResponse response = bulkRequest
.execute()
.actionGet();
return response;
}
/**
* 为多份文档建立索引,采用自生成id
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param kvList 键值对形式的文档数据:List<Map<field, value>>
* @return
*/
public BulkResponse batchIndexDocsForMap(String index, String type, List<Map<String, Object>> kvList)
throws Exception {
if (kvList.isEmpty()) {
throw new Exception("批量创建索引时,传入的参数'kvList'为空!");
}
List<String> jsonList = new ArrayList<String>(kvList.size());
for (Map<String, Object> kvMap : kvList) {
jsonList.add(JSONObject.toJSONString(kvMap));
}
BulkResponse response = this.batchIndexDocsForJson(index, type, jsonList);
jsonList.clear();
return response;
}
/**
* 为多份文档建立索引
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param idJsonMap id及json格式的文档数据: Map<id,json>
* @return
*/
public BulkResponse batchIndexDocsForJson(String index, String type, Map<String, String> idJsonMap)
throws Exception {
if (idJsonMap.isEmpty()) {
throw new Exception("批量创建索引时,传入的参数'idJsonMap'为空!");
}
List<IndexRequest> requestList = new ArrayList<IndexRequest>(idJsonMap.size());
for (String id : idJsonMap.keySet()) {
String json = idJsonMap.get(id);
IndexRequest request = client.prepareIndex(index, type, id)
.setSource(json)
.request();
requestList.add(request);
}
BulkRequestBuilder bulkRequest = client.prepareBulk();
for (IndexRequest request : requestList) {
bulkRequest.add(request);
}
BulkResponse response = bulkRequest
.execute()
.actionGet();
return response;
}
/**
* 为多份文档建立索引
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param idKvMap id及键值对形式的文档数据:Map<id,Map<field, value>>
* @return
*/
public BulkResponse batchIndexDocsForMap(String index, String type, Map<String, Map<String, Object>> idKvMap)
throws Exception {
if (idKvMap.isEmpty()) {
throw new Exception("批量创建索引时,传入的参数'idKvMap'为空!");
}
Map<String, String> idJsonMap = new HashMap<String, String>(idKvMap.size());
for (String id : idKvMap.keySet()) {
Map<String, Object> kvMap = idKvMap.get(id);
idJsonMap.put(id, JSONObject.toJSONString(kvMap));
}
BulkResponse response = this.batchIndexDocsForJson(index, type, idJsonMap);
idJsonMap.clear();
return response;
}
/**
* 更新一个doc, 若不存在则插入
*
* @param index
* @param type
* @param id
* @param json
* @param script
* @throws java.util.concurrent.ExecutionException
* @throws InterruptedException
*/
// public UpdateResponse upsertDoc(String index, String type, String id, String json, String script) throws Exception {
// IndexRequest indexRequest = new IndexRequest(index, type, id).source(json);
// UpdateRequest updateRequest = new UpdateRequest(index, type, id);
// //updateRequest.doc();
// updateRequest.upsert(indexRequest);
// updateRequest.script(script);
//
// UpdateResponse response = client.update(updateRequest).get();
//
// return response;
// }
public UpdateResponse upsertDoc(String index, String type, String id, String insertJson, String updateJson) throws Exception {
IndexRequest indexRequest = new IndexRequest(index, type, id).source(insertJson);
UpdateRequest updateRequest = new UpdateRequest(index, type, id);
updateRequest.doc(updateJson);
updateRequest.upsert(indexRequest);
UpdateResponse response = client.update(updateRequest).get();
return response;
}
/**
* 根据条件 统计个数
*
* @param queryBuilder 查詢條件
* @param index 索引库名 相當於 数据库名
* @param type 索引类型 相當於 表名
* @return
*/
public long countQuery(String index, String type, QueryBuilder queryBuilder) {
CountRequestBuilder crb = client.prepareCount(index).setTypes(type);
if (queryBuilder != null) {
crb.setQuery(queryBuilder);
}
CountResponse response = crb.execute().actionGet();
return response.getCount();
}
public SearchResponse searchAgg(String index, String type, String searchType, QueryBuilder queryBuilder,
AbstractAggregationBuilder aggBuilder) {
SearchRequestBuilder builder = client.prepareSearch(index).setTypes(type);
if (!StringUtils.isEmpty(searchType)) {
builder.setSearchType(SearchType.valueOf(searchType));
}
if (queryBuilder != null) {
builder = builder.setQuery(queryBuilder);
}
if (aggBuilder != null) {
builder = builder.addAggregation(aggBuilder);
}
SearchResponse searchResponse = builder.execute().actionGet();
return searchResponse;
}
/**
* 删除一个文档
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param id 键值对形式的数据集
* @return
*/
public DeleteResponse deleteDoc(String index, String type, String id) throws InterruptedException {
DeleteRequestBuilder builder = client.prepareDelete(index, type, id);
DeleteResponse response = builder
.execute()
.actionGet();
return response;
}
/**
* 根据条件删除多个文档
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param queryBuilder 查询器
* @return
*/
public void deleteDocsByQuery(String index, String type, QueryBuilder queryBuilder) {
client.prepareDeleteByQuery(index).setTypes(type).setQuery(queryBuilder)
.execute()
.actionGet();
}
/**
* 指定id获取文档
*
* @param index 索引名,相当于关系型数据库的库名
* @param type 文档类型,相当于关系型数据库的表名
* @param id 文档id
* @return
*/
public Map<String, Object> getDoc(String index, String type, String id) {
GetResponse response = client.prepareGet(index, type, id)
.execute()
.actionGet();
Map<String, Object> retMap = response.getSourceAsMap();
return retMap;
}
public List<Map<String, Object>> search(String index, String type, QueryBuilder queryBuilder, FilterBuilder filterBuilder) {
SearchRequestBuilder builder = client.prepareSearch(index).setTypes(type);
if (queryBuilder != null) {
builder = builder.setQuery(queryBuilder);
}
if (filterBuilder != null) {
builder = builder.setPostFilter(filterBuilder);
}
SearchResponse searchResponse = builder.execute().actionGet();
SearchHits hits = searchResponse.getHits();
log.info("Es Hits count: " + hits.getTotalHits());
List<Map<String, Object>> kvList = new ArrayList<Map<String, Object>>();
SearchHit[] hitArray = hits.getHits();
if (hitArray.length > 0) {
for (SearchHit hit : hitArray) {
Map<String, Object> kvMap = hit.getSource();
kvMap.put("version", hit.getVersion());
kvMap.put("_id", hit.getId());
kvList.add(kvMap);
}
}
return kvList;
}
}
10、Hbase处理工具
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 操作Hbase的常用方法
* <p/>
* Created by huqingmiao on 2015/4/14.
*/
public class HbaseUtil {
private static final Logger log = LoggerFactory.getLogger(HbaseUtil.class);
private static Configuration conf = null;
private static HConnection conn = null;
private static String HADOOP_HOME = "C:/hadoop";
static {
// try {
// String hadoopHome = System.getProperties().getProperty("hadoop.home.dir"); //Windows下的HOME目录, 在unix下部署不需要设置
// if (hadoopHome == null || "".equals(hadoopHome.trim())) {
// hadoopHome = HADOOP_HOME;
// }
//
// File hadoopBinDir = new File(hadoopHome, "bin"); //HOME目录下的bin目录
// if (!hadoopBinDir.exists()) {
// hadoopBinDir.mkdirs();
// }
// File winExeFile = new File(hadoopBinDir.getCanonicalPath() + File.separator + "winutils.exe");
// if (!winExeFile.exists()) {
// winExeFile.createNewFile();
// }
//
// //设置环境变量
// System.getProperties().put("hadoop.home.dir", hadoopHome);
//
// } catch (IOException e) {
// log.error("create ./bin/winutils.exe error.", e);
// }
//默认从hbase-site.xml读取配置信息
conf = HBaseConfiguration.create();
// conf.set("hbase.zookeeper.property.clientPort", "2181");
// conf.set("hbase.zookeeper.quorum", "10.75.201.125");
// conf.set("hbase.master", "10.75.201.125:60010");
//conf.set("hbase.zookeeper.quorum", "hmaster");
//与hbase/conf/hbase-site.xml中hbase.zookeeper.property.clientPort配置的值相同
// conf.set("hbase.zookeeper.property.clientPort", "2181");
}
public HbaseUtil() {
try {
//预先创建了一个连接,以后的访问都共享该连接
//conf.addResource("hbase-site.xml");
conn = HConnectionManager.createConnection(conf);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
@Override
public void finalize() throws Throwable {
try {
if (conn != null && !conn.isClosed()) {
conn.close();
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
super.finalize();
}
/**
* 建表
*
* @param tableName 表名
* @param columnFamilys 列簇名
* @throws Exception
*/
public void createTable(String tableName, String[] columnFamilys) throws Exception {
HBaseAdmin hAdmin = null;
try {
hAdmin = new HBaseAdmin(conf);
if (hAdmin.tableExists(tableName)) {
log.info("已经存在要创建的表:" + tableName);
} else {
HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));
//描述列族
for (String columnFamily : columnFamilys) {
tableDesc.addFamily(new HColumnDescriptor(columnFamily));
}
//建表
hAdmin.createTable(tableDesc);
log.info("成功创建表:" + tableName);
}
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (hAdmin != null) {
hAdmin.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 删除表
*
* @param tableName 表名
* @throws Exception
*/
public void deleteTable(String tableName) throws Exception {
HBaseAdmin hAdmin = null;
try {
hAdmin = new HBaseAdmin(conf);
if (hAdmin.tableExists(tableName)) {
hAdmin.disableTable(tableName);//禁用表
hAdmin.deleteTable(tableName);// 删除表
log.info("成功删除表:" + tableName);
} else {
log.info("要删除的表不存在:" + tableName);
}
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (hAdmin != null) {
hAdmin.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 向指定的行、列簇、列写入一项数据;如果该行不存在,则会插入一行。
*
* @param tableName 表名
* @param rowkey 行键
* @param colFamily 列簇名
* @param column 列名
* @param value 列值
* @throws Exception
*/
public void putData(String tableName, String rowkey,
String colFamily, String column, String value) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
Put put = new Put(Bytes.toBytes(rowkey));
// 参数分别为:列族、列、值
put.add(Bytes.toBytes(colFamily), Bytes.toBytes(column), Bytes.toBytes(value));
table.put(put);
log.info("成功写入1项数据到{}.", tableName);
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 向指定的行、列簇、列写入一项数据;如果该行不存在,则会插入一行。
*
* @param tableName 表名
* @param hbCell 存放行键、列簇、列名、列值的数据单元
* @throws Exception
*/
public void putData(String tableName, HbaseCell hbCell) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
Put put = new Put(convertToBytes(hbCell.getRowkey()));
// 参数分别为:列族、列、值
put.add(Bytes.toBytes(hbCell.getColFamily()), Bytes.toBytes(hbCell.getColName()), convertToBytes(hbCell.getColValue()));
table.put(put);
log.info("成功写入1项数据到{}.", tableName);
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 写入多行、多列数据
*
* @param tableName 表名
* @param hbCellList 存放行键、列簇、列名、列值的数据单元.
* @throws Exception
*/
public void putData(String tableName, List<HbaseCell> hbCellList) throws Exception {
if (hbCellList.isEmpty()) {
return;
}
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
List<Put> putList = new ArrayList<Put>();
for (HbaseCell hbCell : hbCellList) {
Put put = new Put(convertToBytes(hbCell.getRowkey()));
put.add(Bytes.toBytes(hbCell.getColFamily()), Bytes.toBytes(hbCell.getColName()), convertToBytes(hbCell.getColValue()));
putList.add(put);
}
table.put(putList);
log.info("成功写入{}项数据到{}.", hbCellList.size(), tableName);
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 写入多行、多列数据
*
* @param tableName 表名
* @param hbCellList 存放行键、列簇、列名、列值的数据单元.
* @throws Exception
*/
public void putDataForNotNull(String tableName, List<HbaseCell> hbCellList) throws Exception {
if (hbCellList.isEmpty()) {
return;
}
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
List<Put> putList = new ArrayList<Put>();
for (HbaseCell hbCell : hbCellList) {
if (!StringUtils.isEmpty(hbCell.getColValue() + "")) {
Put put = new Put(convertToBytes(hbCell.getRowkey()));
put.add(Bytes.toBytes(hbCell.getColFamily()), Bytes.toBytes(hbCell.getColName()), convertToBytes(hbCell.getColValue()));
putList.add(put);
}
}
table.put(putList);
log.info("成功写入{}项数据到{}.", hbCellList.size(), tableName);
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 删除一行
*
* @param tableName 表名
* @param rowkey 行键
* @throws Exception
*/
public void delRow(String tableName, String rowkey) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
Delete del = new Delete(Bytes.toBytes(rowkey));
table.delete(del);
log.info("成功删除1行数据!");
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 删除多行
*
* @param tableName 表名
* @param rowkeys 行键
* @throws Exception
*/
public void delMulitRows(String tableName, List<String> rowkeys) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
List<Delete> delList = new ArrayList<Delete>();
for (String rowkey : rowkeys) {
Delete del = new Delete(Bytes.toBytes(rowkey));
delList.add(del);
}
table.delete(delList);
delList.clear();
log.info("成功删除{}行数据.", delList.size());
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 获取指定行的所有数据项
*
* @param tableName 表名
* @param rowkey 行键
* @return
* @throws Exception
*/
public Result getRow(String tableName, String rowkey) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
Get get = new Get(Bytes.toBytes(rowkey));
Result rs = table.get(get);
// for (Cell cell : result.rawCells()) {
// System.out.print("Row Name: " + new String(CellUtil.cloneRow(cell)) + " ");
// System.out.print("Timestamp: " + cell.getTimestamp() + " ");
// System.out.print("column Family: " + new String(CellUtil.cloneFamily(cell)) + " ");
// System.out.print("column Name: " + new String(CellUtil.cloneQualifier(cell)) + " ");
// System.out.println("Value: " + new String(CellUtil.cloneValue(cell)) + " ");
// }
return rs;
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 获取指定表的所有行的数据项
*
* @param tableName 表名
* @return
* @throws Exception
*/
public List<Result> findAllRows(String tableName) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
Scan scan = new Scan();
ResultScanner results = table.getScanner(scan);
List<Result> rsList = new ArrayList<Result>();
for (Result rs : results) {
rsList.add(rs);
}
return rsList;
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 通用查询
*
* @param tableName 表名
* @param filter 查询过滤器。单一条件查询可传Filter对象,组合条件查询可传FilterList, FilterList是Filter的子类。
*/
public List<Result> findRow(String tableName, Filter filter) throws Exception {
HTableInterface table = null;
try {
//table = new HTable(conf, tableName);
table = conn.getTable(tableName);
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner results = table.getScanner(scan);
List<Result> rsList = new ArrayList<Result>();
for (Result rs : results) {
rsList.add(rs);
}
return rsList;
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
try {
if (table != null) {
table.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* 打印、展示查询结果
*
* @param result
*/
public void showData(Result result) {
for (Cell cell : result.rawCells()) {
log.info("Row: " + new String(CellUtil.cloneRow(cell)) + " ");
log.info("Timestamp: " + cell.getTimestamp() + " ");
log.info("Column Family: " + new String(CellUtil.cloneFamily(cell)) + " ");
log.info("Column Name: " + new String(CellUtil.cloneQualifier(cell)) + " ");
log.info("Column Value: " + new String(CellUtil.cloneValue(cell)) + " ");
}
}
/**
* 打印、展示查询的各项列值
*
* @param rsList
*/
public void showData(List<Result> rsList) {
log.info(">>>总的数据条数:" + rsList.size());
if (rsList.isEmpty()) {
return;
}
for (Result rs : rsList) {
Cell[] cells = rs.rawCells();
for (Cell cell : rs.rawCells()) {
log.info("Row: " + new String(CellUtil.cloneRow(cell)) + " ");
log.info("Timestamp: " + cell.getTimestamp() + " ");
log.info("Column Family: " + new String(CellUtil.cloneFamily(cell)) + " ");
log.info("Column Name: " + new String(CellUtil.cloneQualifier(cell)) + " ");
log.info("Column Value: " + new String(CellUtil.cloneValue(cell)) + " ");
}
}
}
/**
* 打印、展示查询的各项列值
*
* @param rsList
*/
public void showRowkey(List<Result> rsList) {
log.info(">>>总的数据条数:" + rsList.size());
if (rsList.isEmpty()) {
return;
}
for (Result rs : rsList) {
log.info(new String(rs.getRow()));
}
}
private byte[] convertToBytes(Object obj) throws Exception {
if (obj == null) {
return new byte[0];
}
if (obj instanceof String) {
return Bytes.toBytes((String) obj);
}
if (obj instanceof Double) {
return Bytes.toBytes((Double) obj);
}
if (obj instanceof Float) {
return Bytes.toBytes((Float) obj);
}
if (obj instanceof Long) {
return Bytes.toBytes((Long) obj);
}
if (obj instanceof Integer) {
return Bytes.toBytes((Integer) obj);
}
if (obj instanceof Date) {
return Bytes.toBytes(((Date) obj).getTime());
}
if (obj instanceof Timestamp) {
return Bytes.toBytes(((Timestamp) obj).getTime());
}
if (obj instanceof BigDecimal) {
return Bytes.toBytes((BigDecimal) obj);
}
throw new Exception("未能识别的数据类型: " + obj.getClass().getName());
}
// main
public static void main(String[] args) {
try {
HbaseUtil client = new HbaseUtil();
String tableName = "testtable";
// 创建数据库表:“studyinfo”
String[] colFamilys = {"studyinfo", "course"};
client.createTable(tableName, colFamilys);
// 添加第一行数据
client.putData(tableName, "ligan", "studyinfo", "age", "2333");
client.putData(tableName, "ligan", "studyinfo", "sex", "boy");
client.putData(tableName, "ligan", "course", "china", "97");
client.putData(tableName, "ligan", "course", "math", "128");
client.putData(tableName, "ligan", "course", "english", "85");
// 添加第二行数据
client.putData(tableName, "xiaoxue", "studyinfo", "age", "20");
client.putData(tableName, "xiaoxue", "studyinfo", "sex", "boy");
client.putData(tableName, "xiaoxue", "course", "china", "90");
client.putData(tableName, "xiaoxue", "course", "math", "100");
client.putData(tableName, "xiaoxue", "course", "english", "90");
// 添加第三行数据,也可以这样写:
HbaseCell hbCell1 = new HbaseCell("walker", "studyinfo", "age", "18");
HbaseCell hbCell2 = new HbaseCell("walker", "studyinfo", "sex", "girl");
HbaseCell hbCell3 = new HbaseCell("walker", "course", "math", "100");
HbaseCell hbCell4 = new HbaseCell("walker", "course", "english", "30");
List<HbaseCell> cellList = new ArrayList<HbaseCell>();
cellList.add(hbCell1);
cellList.add(hbCell2);
cellList.add(hbCell3);
cellList.add(hbCell4);
client.putData(tableName, cellList);
// 获取一条数据
log.info("获取一条数据");
Result rs = client.getRow(tableName, "ligan");
client.showData(rs);
//组合查询
log.info("组合查询");
List<Filter> filters = new ArrayList<Filter>();
Filter filter1 = new SingleColumnValueFilter(Bytes
.toBytes("studyinfo"), Bytes.toBytes("age"), CompareFilter.CompareOp.GREATER, Bytes
.toBytes("18"));
filters.add(filter1);
Filter filter2 = new SingleColumnValueFilter(Bytes
.toBytes("course"), Bytes.toBytes("math"), CompareFilter.CompareOp.EQUAL, Bytes
.toBytes("100"));
filters.add(filter2);
FilterList filterList = new FilterList(filters);
List<Result> rsList = client.findRow(tableName, filterList);
log.info(">>>" + rsList.size());
// 获取所有数据
log.info("获取所有数据");
rsList = client.findAllRows(tableName);
log.info(">>>" + rsList.size());
//删除一条数据
log.info("删除一条数据");
client.delRow(tableName, "tht");
log.info(">>>" + rsList.size());
//删除多条数据
log.info("删除多条数据");
List<String> rows = new ArrayList<String>();
rows.add("xiaoxue");
rows.add("walker");
client.delMulitRows(tableName, rows);
client.findAllRows(tableName);
log.info(">>>" + rsList.size());
//删除数据库
log.info("删除表");
client.deleteTable(tableName);
} catch (Exception err) {
err.printStackTrace();
}
}
}
11、mongodb处理工具
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.bson.Document;
import com.alibaba.fastjson.JSONObject;
import com.github.walker.mybatis.paginator.PageList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
public class MongoManager {
private static MongoClient client = null;
private MongoManager()
{
}
static {
initDBPrompties();
}
/**
* 初始化连接池
*/
private static void initDBPrompties() {
String url=PropertyHolder.getProperty("mongodb.url");
String dbName=PropertyHolder.getProperty("mongodb.dbName");
String userName=PropertyHolder.getProperty("mongodb.userName");
String password=PropertyHolder.getProperty("mongodb.password");
int connectionsPerHost = Integer.valueOf(PropertyHolder.getProperty("mongodb.connectionsPerHost"));
int threads = Integer.valueOf(PropertyHolder.getProperty("mongodb.threads"));
int maxWaitTime=Integer.valueOf(PropertyHolder.getProperty("mongodb.maxWaitTime"));
int socketTimeout=Integer.valueOf(PropertyHolder.getProperty("mongodb.socketTimeout"));
int maxConnectionLifeTime=Integer.valueOf(PropertyHolder.getProperty("mongodb.maxConnectionLifeTime"));
int connectTimeout = Integer.valueOf(PropertyHolder.getProperty("mongodb.connectTimeout"));
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
ServerAddress address = new ServerAddress(url);
MongoCredential credential = MongoCredential.createCredential(userName,dbName,password.toCharArray());
credentials.add(credential);
MongoClientOptions.Builder build = new MongoClientOptions.Builder();
build.connectionsPerHost(connectionsPerHost);
build.maxWaitTime(maxWaitTime);
build.maxConnectionLifeTime(maxConnectionLifeTime);
build.connectTimeout(connectTimeout);
build.threadsAllowedToBlockForConnectionMultiplier(threads);
build.socketTimeout(socketTimeout);
MongoClientOptions options = build.build();
client = new MongoClient(address, credentials, options);
}
/**
* 获取数据库
* @param dbName 数据库
* @return
*/
public static MongoDatabase getDB(String dbName) {
return client.getDatabase(dbName);
}
/**
* 获取表
* @param dbName 数据库
* @param collectionName 集合
* @return
*/
public static MongoCollection<Document> getCollection(String dbName,String collectionName)
{
MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName);
return collection;
}
/**
* 插入表数据
* @param dbName 数据库
* @param collectionName 集合
* @param json 待入库json
*/
public static void insert(String dbName,String collectionName,String json)
{
MongoCollection<Document> collection = getCollection(dbName, collectionName);
Document document = Document.parse(json);
collection.insertOne(document);
}
/**
* 分页查询用户操作日志
* @param dbName 数据库
* @param collectionName 集合
* @param acctNo 账户号
* @param start
* @param pageSize
* @return
*/
public static PageList<UserOpLog> findUserOpLog(String dbName,String collectionName,String acctNo,String tenantId,String keyWord,String startDate,String endDate,int start,int pageSize)
{
List<UserOpLog> logList = new ArrayList<UserOpLog>();
MongoCollection<Document> collection = getCollection(dbName, collectionName);
BasicDBObject queryObject = new BasicDBObject();
BasicDBObject tmpObject = new BasicDBObject();
BasicDBObject dateObject = new BasicDBObject();
if(StringUtils.isNotEmpty(acctNo))
{
queryObject.put("acctNo", acctNo);
}
if(tenantId!=null)
{
queryObject.put("tenantId", tenantId);
}
if(StringUtils.isNotEmpty(keyWord))
{
Pattern pattern = Pattern.compile("^.*"+keyWord+".*$", Pattern.CASE_INSENSITIVE);
queryObject.put("opDesc", pattern);
}
tmpObject.put("$gte", startDate); //大于
dateObject = tmpObject.append("$lte", endDate); //小于
queryObject.put("opTime", dateObject);
FindIterable<Document> iterator= collection.find(queryObject).sort((new BasicDBObject("opTime",-1)));
int count = 0;
MongoCursor<Document> cursor= iterator.iterator();
while(cursor.hasNext()) {
Document doc = cursor.next();
if(count>=start && count<=pageSize+start-1)
{
UserOpLog userOpLog = new UserOpLog();
userOpLog.setAcctNo(doc.getString("acctNo"));
userOpLog.setClasz(doc.getString("clasz"));
userOpLog.setErrorMsg(doc.getString("errorMsg"));
userOpLog.setMethod(doc.getString("method"));
userOpLog.setName(doc.getString("name"));
userOpLog.setOpDesc(doc.getString("opDesc"));
userOpLog.setOpResult(doc.getInteger("opResult"));
userOpLog.setOpTime(doc.getString("opTime"));
userOpLog.setUri(doc.getString("uri"));
userOpLog.setTenantId(doc.getString("tenantId"));
logList.add(userOpLog);
}
count++;
}
cursor.close();
PageList<UserOpLog> pageList = new PageList<UserOpLog>(logList,count);
return pageList;
}
/**
* 分页查询接口调用日志
* @param dbName 数据库
* @param collectionName 集合
* @param tenantId 商户ID
* @param appId 应用ID
* @param startDate 开始日期
* @param endDate 结束日期
* @param start
* @param pageSize
* @return
*/
public static PageList<UserCallLog> findUserCallLog(String dbName,String collectionName,String tenantId,String appId,String startDate,String endDate,int start,int pageSize)
{
List<UserCallLog> logList = new ArrayList<UserCallLog>();
MongoCollection<Document> collection = getCollection(dbName, collectionName);
BasicDBObject queryObject = new BasicDBObject();
BasicDBObject tmpObject = new BasicDBObject();
BasicDBObject dateObject = new BasicDBObject();
if(StringUtils.isNotEmpty(tenantId))
{
queryObject.put("tenantId", tenantId);
}
if(StringUtils.isNotEmpty(appId))
{
queryObject.put("appId", appId);
}
tmpObject.put("$gte", startDate); //大于
dateObject = tmpObject.append("$lte", endDate); //小于
queryObject.put("reqTime", dateObject);
FindIterable<Document> iterator= collection.find(queryObject) ;
int count = 0;
MongoCursor<Document> cursor= iterator.iterator();
while(cursor.hasNext()) {
Document doc = cursor.next();
if(count>=start && count<=pageSize+start-1)
{
UserCallLog userCallLog = new UserCallLog();
userCallLog.setAppId(doc.getString("appId"));
userCallLog.setClientHost(doc.getString("clientHost"));
userCallLog.setClientIp(doc.getString("clientIp"));
userCallLog.setClientPort(doc.getInteger("clientPort"));
userCallLog.setErrorCode(doc.getString("errorCode"));
userCallLog.setErrorMsg(doc.getString("errorMsg"));
userCallLog.setFlowNo(doc.getString("flowNo"));
userCallLog.setInterfaceClasz(doc.getString("interfaceClasz"));
userCallLog.setInterfaceId(doc.getString("interfaceId"));
userCallLog.setMethodId(doc.getString("methodId"));
userCallLog.setMethodName(doc.getString("methodName"));
userCallLog.setReqBytes(doc.getInteger("reqBytes"));
userCallLog.setReqTime(doc.getString("reqTime"));
userCallLog.setResBytes(doc.getInteger("resBytes"));
userCallLog.setResTime(doc.getString("resTime"));
userCallLog.setSvcId(doc.getString("svcId"));
userCallLog.setSvcInterface(doc.getString("svcInterface"));
userCallLog.setTenantId(doc.getString("tenantId"));
userCallLog.setToken(doc.getString("token"));
userCallLog.setUri(doc.getString("uri"));
logList.add(userCallLog);
}
count++;
}
cursor.close();
PageList<UserCallLog> pageList = new PageList<UserCallLog>(logList,count);
return pageList;
}
}
12、redis处理工具
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class QCloudJedis {
private static final Logger log = LoggerFactory.getLogger(QCloudJedis.class);
private static final Properties properties = ClassesConfigLoader.getProperties();
private static final String host = properties.getProperty("redis.host");
private static final int port = Integer.valueOf(properties.getProperty("redis.port"));
private static final String instanceid = properties.getProperty("redis.instanceid");
private static final String password = properties.getProperty("redis.password");
private static final int timeout = Integer.valueOf(properties.getProperty("redis.timeout", "2000"));
private static final int maxTotal = Integer.valueOf(properties.getProperty("redis.maxTotal", "1024"));
private static final int maxIdle = Integer.valueOf(properties.getProperty("redis.maxIdle", "10"));
private static final int maxWaitMillis = Integer.valueOf(properties.getProperty("redis.maxWaitMillis", "3000"));
private static final boolean testOnIdle = Boolean.valueOf(properties.getProperty("redis.testOnIdle", "true")); //是否checkIdle
private static final int timeCheckIdle = Integer.valueOf(properties.getProperty("redis.timeCheckIdle", "60000")); //每隔多少秒check一次
private static final int idleTimeout = Integer.valueOf(properties.getProperty("redis.idleTimeout", "300000")); //超时时间
private static final int numTestsPerEvictionRun = Integer.valueOf(properties.getProperty("redis.numTestsPerEvictionRun", "1024")); //一次驱逐过程中,最多驱逐对象的个数
private static JedisPool pool = null;
//private static Jedis jedis = null;
private static Object lock = new Object();
static {
init();
}
private static void init() {
if (null == pool) {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMaxWaitMillis(maxWaitMillis);
config.setTestWhileIdle(testOnIdle);
config.setTimeBetweenEvictionRunsMillis(timeCheckIdle);
config.setMinEvictableIdleTimeMillis(idleTimeout);
config.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
synchronized (lock) {
if (null == pool) {
try {
pool = new JedisPool(config, host, port, timeout, instanceid + ":" + password);
log.info("init jedis pool successful!");
} catch (Exception e) {
log.error("", e);
}
}
}
}
}
// public static Jedis getInstance() {
// init();
//
// return jedis;
// }
/**
* 获取一个jedis 对象
*
* @return
*/
private static Jedis getJedis() {
if (pool == null) {
init();
}
return pool.getResource();
}
/**
* 返还到连接池
*
* @param pool
* @param redis
*/
private static void returnResource(Jedis redis) {
if (redis != null) {
redis.close();
}
}
// 删除key
public static Long del(String key) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.del(key);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
return -1L;
} finally {
// 返还到连接池
returnResource(jedis);
}
}
public static Boolean exists(String key) {
Jedis jedis = null;
Boolean flag = false;
try {
jedis = getJedis();
flag = jedis.exists(key);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
} finally {
// 返还到连接池
returnResource(jedis);
}
return flag;
}
/**
* 获取数据
*
* @param key
* @return
*/
public static String get(String key) {
String value = null;
Jedis jedis = null;
try {
jedis = getJedis();
value = jedis.get(key);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
} finally {
// 返还到连接池
returnResource(jedis);
}
return value;
}
// 设置
public static String set(String key, String value) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.set(key, value);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
return "";
} finally {
// 返还到连接池
returnResource(jedis);
}
}
// 获取Hash值
public static String hget(String key, String field) {
Jedis jedis = null;
String value = null;
try {
jedis = getJedis();
value = jedis.hget(key, field);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
} finally {
// 返还到连接池
returnResource(jedis);
}
return value;
}
public static Map<String, String> hgetAll(String key) {
Jedis jedis = null;
Map<String, String> value = null;
try {
jedis = getJedis();
value = jedis.hgetAll(key);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
} finally {
// 返还到连接池
returnResource(jedis);
}
return value;
}
// 设置Hash值
public static Long hset(String key, String field, String value) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.hset(key, field, value);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
return -1L;
} finally {
// 返还到连接池
returnResource(jedis);
}
}
// 删除Hash值
public static Long hdel(String key, String... fields) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.hdel(key, fields);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
return -1L;
} finally {
// 返还到连接池
returnResource(jedis);
}
}
public static Long expire(String key, int seconds) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.expire(key, seconds);
} catch (Exception e) {
log.error("操作Redis发生异常,异常详情:", e);
return -1L;
} finally {
// 返还到连接池
returnResource(jedis);
}
}
public static void main(String[] args) {
try {
while (true) {
String key = "ftc-ump-mid";
//System.out.println("before setting: " + jedis.hget(key, "attr"));
System.out.println(">>" + QCloudJedis.hset(key, "attr", "0"));
QCloudJedis.expire(key, 5);
System.out.println("after setting: " + QCloudJedis.hget(key, "attr"));
System.out.println(">>" + QCloudJedis.hdel(key, "attr"));
System.out.println("after delete: " + QCloudJedis.hget(key, "attr"));
Thread.sleep(1000 * 10);
}
//关闭退出
//jedis.quit();
//jedis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
还没有评论,来说两句吧...