封装的方法
1.XmlUtil:Xml的操作类
/** * 读取xml文档方法 * @return */ public static Document getDocument(){ try { Document doc = new SAXReader().read(new File("e:/contact.xml")); return doc; } catch (DocumentException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 写出到xml文档中 */ public static void write2xml(Document doc){ try { FileOutputStream out = new FileOutputStream("e:/contact.xml"); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(out,format); writer.write(doc); writer.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } }
2.jdbcUtil:对数据库的连接关闭操作
/** * 抽取获取连接对象的方法 */ public static Connection getConnection(){ try { Connection conn = DriverManager.getConnection(url, user, password); return conn; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 释放资源的方法 */ public static void close(Connection conn,Statement stmt){ if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } public static void close(Connection conn,Statement stmt,ResultSet rs){ if(rs!=null) try { rs.close(); } catch (SQLException e1) { e1.printStackTrace(); throw new RuntimeException(e1); } if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
3.BaseDao:通用的数据操作类,我们自己写的可以继承他
/** * 通用的dao,自己写的所有的dao都继承此类; * 此类定义了2个通用的方法: * 1. 更新 * 2. 查询 * @author Jie.Yuan * */ public class BaseDao { // 初始化参数 private Connection con; private PreparedStatement pstmt; private ResultSet rs; /** * 更新的通用方法 * @param sql 更新的sql语句(update/insert/delete) * @param paramsValue sql语句中占位符对应的值(如果没有占位符,传入null) */ public void update(String sql,Object[] paramsValue){ try { // 获取连接 con = JdbcUtil.getConnection(); // 创建执行命令的stmt对象 pstmt = con.prepareStatement(sql); // 参数元数据: 得到占位符参数的个数 int count = pstmt.getParameterMetaData().getParameterCount(); // 设置占位符参数的值 if (paramsValue != null && paramsValue.length > 0) { // 循环给参数赋值 for(int i=0;i<count;i++) { pstmt.setObject(i+1, paramsValue[i]); } } // 执行更新 pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.closeAll(con, pstmt, null); } } /** * 查询的通用方法 * @param sql * @param paramsValue */ public <T> List<T> query(String sql, Object[] paramsValue,Class<T> clazz){ try { // 返回的集合 List<T> list = new ArrayList<T>(); // 对象 T t = null; // 1. 获取连接 con = JdbcUtil.getConnection(); // 2. 创建stmt对象 pstmt = con.prepareStatement(sql); // 3. 获取占位符参数的个数, 并设置每个参数的值 int count = pstmt.getParameterMetaData().getParameterCount(); if (paramsValue != null && paramsValue.length > 0) { for (int i=0; i<paramsValue.length; i++) { pstmt.setObject(i+1, paramsValue[i]); } } // 4. 执行查询 rs = pstmt.executeQuery(); // 5. 获取结果集元数据 ResultSetMetaData rsmd = rs.getMetaData(); // ---> 获取列的个数 int columnCount = rsmd.getColumnCount(); // 6. 遍历rs while (rs.next()) { // 要封装的对象 t = clazz.newInstance(); // 7. 遍历每一行的每一列, 封装数据 for (int i=0; i<columnCount; i++) { // 获取每一列的列名称 String columnName = rsmd.getColumnName(i + 1); // 获取每一列的列名称, 对应的值 Object value = rs.getObject(columnName); // 封装: 设置到t对象的属性中 【BeanUtils组件】 BeanUtils.copyProperty(t, columnName, value); } // 把封装完毕的对象,添加到list集合中 list.add(t); } return list; } catch (Exception e) { throw new RuntimeException(e); } finally { JdbcUtil.closeAll(con, pstmt, rs); } } }
4.java后台获得html 的get请求结果
// 构造HttpClient的实例 HttpClient httpClient = new HttpClient(); // 创建GET方法的实例 GetMethod getMethod = new GetMethod(url); // 使用系统提供的默认的恢复策略 不重试 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false)); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(TIME_OUT); // 执行getMethod int statusCode = httpClient.executeMethod(getMethod); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + getMethod.getStatusLine()); } // 处理内容 String html = getMethod.getResponseBodyAsString(); JSONObject jsonObject = JSONObject.parseObject(html);
5.HttpUtil工具类
package com.ty.tyzxtj.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; /** * http工具类 * @author wangjiping * */ public class HttpUtil { // 超时时间 public static final int TIME_OUT = 50000; public static String post(String postUrl){ String response = ""; PostMethod postMethod = new PostMethod(postUrl); try { HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams() .setConnectionTimeout(50000);// 设置连接时间 int status = client.executeMethod(postMethod); if (status == HttpStatus.SC_OK) { InputStream inputStream = postMethod.getResponseBodyAsStream(); BufferedReader br = new BufferedReader(new InputStreamReader( inputStream)); StringBuffer stringBuffer = new StringBuffer(); String str = ""; while ((str = br.readLine()) != null) { stringBuffer.append(str); } response = stringBuffer.toString(); } else { response = "fail"; } } catch (Exception e) { e.printStackTrace(); } finally { // 释放连接 postMethod.releaseConnection(); } return response; } public static String loadJson (String url) { StringBuilder json = new StringBuilder(); try { URL urlObject = new URL(url); URLConnection uc = urlObject.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); String inputLine = null; while ( (inputLine = in.readLine()) != null) { json.append(inputLine); } in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return json.toString(); } public static String get(String url){ String html = ""; // 构造HttpClient的实例 HttpClient httpClient = new HttpClient(); // 创建GET方法的实例 GetMethod getMethod = new GetMethod(url); // 使用系统提供的默认的恢复策略 不重试 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false)); getMethod.setRequestHeader("Connection" , "Keep-Alive"); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(TIME_OUT); httpClient.getHttpConnectionManager().getParams().setSoTimeout(TIME_OUT); try { // 执行getMethod int statusCode = httpClient.executeMethod(getMethod); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + getMethod.getStatusLine()); } // 处理内容 html = getMethod.getResponseBodyAsString(); } catch (Exception e) { } finally { // 释放连接 getMethod.releaseConnection(); } return html; } }
使用实例:上传文件到指定服务器中去
/** * 将微信图片保存到服务器-ftp形式 * * @param accessToken * @param mediaId * @param picPath * @throws Exception */ public boolean saveImageToDisk1(String accessToken, String mediaId, String picPath, String id, String orderNo) throws Exception { boolean success = false; InputStream inputStream = getInputStream(accessToken, mediaId); String url = "121.43.123.123";//ftp.getUrl(); int port = 32;//ftp.getPort(); String username = "to123t";//ftp.getUsername(); String password = "A1239--";//ftp.getPassword(); FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(url, port);// 连接FTP服务器 ftp.login(username, password);// 登录 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return success; } ftp.makeDirectory(picPath); ftp.changeWorkingDirectory(picPath); ftp.enterLocalPassiveMode(); Integer number = ftp.listFiles(picPath).length+1; String filename = "安装照片" + number + ".jpg"; boolean storeFile = ftp.storeFile(new String(filename.getBytes("utf-8"), "iso-8859-1"), inputStream); log.info(mediaId + "下载结果:" + storeFile); if (storeFile) { success = true; wechatMapper.updatePicUrl(id, "/file/wx/" + orderNo + "/安装照片" + number + ".jpg"); } else { success = false; } inputStream.close(); ftp.logout(); } catch (Exception e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return success; }
6.根据api获得文件流
/** * 获取文件流 * * @param accessToken * @param mediaId * @return */ public static InputStream getInputStreamByApi(String urlApi) { InputStream is = null; try { URL urlGet = new URL(url); HttpURLConnection http = (HttpURLConnection) urlGet.openConnection(); http.setRequestMethod("GET"); // 必须是get方式请求 http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); http.setDoOutput(true); http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒 http.connect(); // 获取文件转化为byte流 is = http.getInputStream(); } catch (Exception e) { e.printStackTrace(); } return is; }
7.操作excel表格
/** * 内容导出excel */ public void exportExcel(HttpServletRequest request, int fenye, HttpServletResponse response, String fn, List<Map<String, Object>> result, String[] cols, String[] matchs) { Workbook workbook = new HSSFWorkbook(); for (int m = 0; m <= result.size()/fenye; m++) { Sheet sheet = workbook.createSheet("第"+(m+1)+"页"); Row row = sheet.createRow(0); for (int i = 0; i < cols.length; i++) { row.createCell(i).setCellValue(cols[i]); } int rowIndex= 1; for (int i = m*fenye; i < (m+1)*fenye; i++) { if(i==result.size()){ break; } Map<String, Object> map = result.get(i); row = sheet.createRow(rowIndex++); for (int j = 0; j < cols.length; j++) { if(matchs[j].equals("distance")){ row.createCell(j).setCellValue(Double.parseDouble(StringUtil.nullReplace(map.get(matchs[j])))); }else if(matchs[j].equals("duration")){ row.createCell(j).setCellValue(formatDuration(String.valueOf((map.get("duration"))))); }else if(matchs[j].equals("start_time")){ if(StringUtil.nullReplace(map.get("start_time")).length()!=0&&StringUtil.nullReplace(map.get("start_time")).matches("^[0-9]*$")){ row.createCell(j).setCellValue(sdf2.format(map.get("start_time"))); }else{ if(StringUtil.nullReplace(map.get("start_time")).length()==21){ row.createCell(j).setCellValue(StringUtil.nullReplace(map.get("start_time")).substring(0,19)); }else{ row.createCell(j).setCellValue(StringUtil.nullReplace(map.get("start_time"))); } } }else if(matchs[j].equals("end_time")){ if("32503651199000".equals(map.get("end_time").toString())){ row.createCell(j).setCellValue(""); }else{ row.createCell(j).setCellValue(sdf2.format(map.get("end_time"))); } }else{ row.createCell(j).setCellValue(StringUtil.nullReplace(map.get(matchs[j]))); } } } } try { OutputStream output=response.getOutputStream(); response.reset(); //response.setHeader("Content-disposition", "attachment; filename="+fn); response.setContentType("application/msexcel"); boolean isMSIE = isMSBrowser(request); if (isMSIE) { fn = URLEncoder.encode(fn, "UTF-8"); } else { fn = new String(fn.getBytes("GBK"), "ISO-8859-1"); } fn = fn.replaceAll(":", "-"); response.setHeader("Content-disposition", "attachment;filename=\"" + fn + "\""); workbook.write(output); output.close(); } catch (IOException e) { e.printStackTrace(); } }
8.加密密码
package com.ty.tyzxtj.util; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; /** * 使用方式String pwd = PasswordUtil.encrypt(userName, password, PasswordUtil.getStaticSalt()); * @author wangjiping * */ public class PasswordUtil { /** * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 * */ /** * 定义使用的算法为:PBEWITHMD5andDES算法 */ public static final String ALGORITHM = "PBEWithMD5AndDES";//加密算法 public static final String Salt = "63293188";//密钥 /** * 定义迭代次数为1000次 */ private static final int ITERATIONCOUNT = 1000; /** * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节 * * @return byte[] 盐值 * */ public static byte[] getSalt() throws Exception { // 实例化安全随机数 SecureRandom random = new SecureRandom(); // 产出盐 return random.generateSeed(8); } public static byte[] getStaticSalt() { // 产出盐 return Salt.getBytes(); } /** * 根据PBE密码生成一把密钥 * * @param password * 生成密钥时所使用的密码 * @return Key PBE算法密钥 * */ private static Key getPBEKey(String password) { // 实例化使用的算法 SecretKeyFactory keyFactory; SecretKey secretKey = null; try { keyFactory = SecretKeyFactory.getInstance(ALGORITHM); // 设置PBE密钥参数 PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); // 生成密钥 secretKey = keyFactory.generateSecret(keySpec); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return secretKey; } /** * 加密明文字符串 * * @param plaintext * 待加密的明文字符串 * @param password * 生成密钥时所使用的密码 * @param salt * 盐值 * @return 加密后的密文字符串 * @throws Exception */ public static String encrypt(String plaintext, String password, byte[] salt) { Key key = getPBEKey(password); byte[] encipheredData = null; PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATIONCOUNT); try { Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); encipheredData = cipher.doFinal(plaintext.getBytes()); } catch (Exception e) { } return bytesToHexString(encipheredData); } /** * 解密密文字符串 * * @param ciphertext * 待解密的密文字符串 * @param password * 生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致) * @param salt * 盐值(如需解密,该参数需要与加密时使用的一致) * @return 解密后的明文字符串 * @throws Exception */ public static String decrypt(String ciphertext, String password, byte[] salt) { Key key = getPBEKey(password); byte[] passDec = null; PBEParameterSpec parameterSpec = new PBEParameterSpec(getStaticSalt(), ITERATIONCOUNT); try { Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); passDec = cipher.doFinal(hexStringToBytes(ciphertext)); } catch (Exception e) { // TODO: handle exception } return new String(passDec); } /** * 将字节数组转换为十六进制字符串 * * @param src * 字节数组 * @return */ public static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * 将十六进制字符串转换为字节数组 * * @param hexString * 十六进制字符串 * @return */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } }
不虚度光阴,享受生命里的每一天!