常用工具类的积累

1.将XML转换为Map集合(下面的代码中request返回的就是xml)

public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException {
        Map<String, String> map = new HashMap<String, String>();
        SAXReader reader = new SAXReader();
        InputStream input = request.getInputStream();
        Document doc = reader.read(input);

        Element root = doc.getRootElement();
        List<Element> list = root.elements();
        for (Element e : list) {
            map.put(e.getName(), e.getText());
        }

        input.close();
        return map;
    }

以上代码使用到的jar包有:
这里写图片描述

2.将pojo类转换为XML格式的数据

student类:(pojo类)

package com.huihui.test3;

public class Student {

    private String name;
    private int age;
    private String sex;
    private String birth;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }



}

School类:(pojo类)

package com.huihui.test3;

public class School {

    private String schoolName;

    private Student student;

    public String getSchoolName() {
        return schoolName;
    }

    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }



}

测试类:

package com.huihui.test3;

import com.thoughtworks.xstream.XStream;

public class Test {

    public static void main(String[] args) {

        Student student = new Student();
        student.setName("张耀晖");
        student.setAge(24);
        student.setSex("男");
        student.setBirth("1992-11-03");

        School school = new School();
        school.setSchoolName("南华大学");
        school.setStudent(student);

        XStream xstream = new XStream();
        xstream.alias("xml", school.getClass());
        String xmlstr = xstream.toXML(school);

        System.out.println(xmlstr);
    }

}

以上代码所用到的jar包:
这里写图片描述
运行结果截图:
这里写图片描述

3.使用Get或者Post请求的方式请求一个URL(请求url后会返回json数据才可以)

Get请求方式:

public static JSONObject doGetStr(String url) {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        JSONObject jsonObject = null;
        try {
            HttpResponse response = httpClient.execute(httpGet);// 接收请求后的返回的结果
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                String result = EntityUtils.toString(entity, "UTF-8");
                jsonObject = JSONObject.fromObject(result);
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

Post请求方式:

public static JSONObject doPostStr(String url, String outStr) {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        JSONObject jsonObject = null;
        try {
            httpPost.setEntity(new StringEntity(outStr, "UTF-8"));
            HttpResponse response = httpClient.execute(httpPost);
            String result = EntityUtils.toString(response.getEntity(), "UTF-8");
            jsonObject = JSONObject.fromObject(result);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

以上代码使用的jar包:
这里写图片描述
这里写图片描述

4.文件上传

public static String upload(String filePath, String accessToken, String type)
            throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
        File file = new File(filePath);
        if (!file.exists() || !file.isFile()) {
            throw new IOException("文件不存在");
        }

        String url = UPLOAD_URL.replace("ACCESS_TOKEN", accessToken).replace("TYPE", type);

        URL urlObj = new URL(url);
        // 连接
        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();

        con.setRequestMethod("POST");
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false);

        // 设置请求头信息
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");

        // 设置边界
        String BOUNDARY = "----------" + System.currentTimeMillis();
        con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

        StringBuilder sb = new StringBuilder();
        sb.append("--");
        sb.append(BOUNDARY);
        sb.append("\r\n");
        sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");
        sb.append("Content-Type:application/octet-stream\r\n\r\n");

        byte[] head = sb.toString().getBytes("utf-8");

        // 获得输出流
        OutputStream out = new DataOutputStream(con.getOutputStream());
        // 输出表头
        out.write(head); 

        // 文件正文部分
        // 把文件已流文件的方式 推入到url中
        DataInputStream in = new DataInputStream(new FileInputStream(file));
        int bytes = 0;
        byte[] bufferOut = new byte[1024];
        while ((bytes = in.read(bufferOut)) != -1) {
            out.write(bufferOut, 0, bytes);
        }
        in.close();

        // 结尾部分
        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线

        out.write(foot);

        out.flush();
        out.close();

        StringBuffer buffer = new StringBuffer();
        BufferedReader reader = null;
        String result = null;
        try {
            // 定义BufferedReader输入流来读取URL的响应
            reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            if (result == null) {
                result = buffer.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                reader.close();
            }
        }

        JSONObject jsonObj = JSONObject.fromObject(result);
        System.out.println(jsonObj);
        String typeName = "media_id";
        if ("thumb".equals(type)) {
            typeName = type + "_media_id";
        }
        String mediaId = jsonObj.getString(typeName);
        return mediaId;
    }

5.SHA1加密

//sha1加密
    public static String getSha1(String str){
        if(str==null||str.length()==0){
            return null;
        }
        char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

        try {
            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
            mdTemp.update(str.getBytes("UTF-8"));
            byte[] md = mdTemp.digest();
            int j = md.length;
            char buf[] = new char[j*2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                buf[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(buf);
        } catch (Exception e) {
            return null;
        }
    }

6.MD5加密工具类:

package com.huihui.util;

import java.security.MessageDigest;

/**
 * MD5加密工具类
 * @author Administrator
 *
 */
public class Md5Util {
    public final static String MD5(String s){
        char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; 
        try {
            byte[] strTemp = s.getBytes();
            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
            mdTemp.update(strTemp);
            byte[] md = mdTemp.digest();
            int j = md.length;
            char str[] = new char[j*2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0>>>4&0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);

        } catch (Exception e) {
            return null;
        }
    }

    public static void main(String[] args) {
        System.out.println(Md5Util.MD5("b"));
    }
}

7.SQL工具类:

package com.huihui.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;


/**
 * 这是一个操作数据库的工具类
 * 
 * @author Administrator
 * 
 */
public class SqlHelper {

    private static String DBDRIVER;
    private static String DBURL;
    private static String DBUSER;
    private static String DBPASS;

    // 定义需要的变量
    private static Connection conn = null;
    private static PreparedStatement pstmt = null;
    private static ResultSet rs = null;

    public static Connection getConn() {
        return conn;
    }

    public static PreparedStatement getPstmt() {
        return pstmt;
    }

    public static ResultSet getRs() {
        return rs;
    }

    // 加载驱动,只需要加载一次
    static {
        FileInputStream fis = null;

        try {
            // 从dbinfo.properties文件中读取配置信息
            Properties pp = new Properties();
            fis = new FileInputStream(
                    "E:\\myeclipse10code\\UserLoginUp\\dbinfo.properties");
            pp.load(fis);
            DBDRIVER = pp.getProperty("driver");
            DBURL = pp.getProperty("url");
            DBUSER = pp.getProperty("user");
            DBPASS = pp.getProperty("pass");

            Class.forName(DBDRIVER);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            fis = null;
        }
    }

    // 得到连接
    public static Connection getConnection() {
        try {
            conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    // 关闭资源
    public static void close(ResultSet rs, PreparedStatement pstmt,
            Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                rs = null;
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                pstmt = null;
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                conn = null;
            }
        }
    }

    // 先写一个update/delete/insert
    // sql格式: update 表名 set 字段名=? where 字段=?
    public static void executeUpdate1(String sql, String[] parameters) {
        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);
            // 给?赋值
            if (parameters != null) {
                for (int i = 0; i < parameters.length; i++) {
                    pstmt.setString(i + 1, parameters[i]);
                }
            }
            // 执行
            pstmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally {
            close(rs, pstmt, conn);
        }
    }

    // 如果有多个update/delete/insert语句【需要考虑事务】
    public static void executeUpdate2(String[] sqls, String[][] parameters) {
        try {
            conn = getConnection();
            // 因为这时用户传入的可能是多个sql语句
            conn.setAutoCommit(false);
            if (sqls != null) {
                for (int i = 0; i < parameters.length; i++) {
                    pstmt = conn.prepareStatement(sqls[i]);
                    if (parameters[i] != null) {
                        for (int j = 0; j < parameters[i].length; j++) {
                            pstmt.setString(j + 1, parameters[i][j]);
                        }
                    }
                    pstmt.executeUpdate();
                }
            }
            conn.commit();
        } catch (Exception e) {
            // 回滚
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally {
            close(rs, pstmt, conn);
        }
    }

    // 统一的select
    public static ResultSet executeQuery(String sql, String[] parameters) {

        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);
            if (parameters != null) {
                for (int i = 0; i < parameters.length; i++) {
                    pstmt.setString(i + 1, parameters[i]);
                }
            }
            System.out.println(pstmt);
            rs = pstmt.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally {
            // 如果这里关闭了资源,就没法使用ResultSet了,也就没法return了
            // close(rs, pstmt, conn);
        }

        return rs;
    }

    //修改后的统一的select (ResultSet-->ArrayList)
    public static ArrayList executeQuery1(String sql,String[] parameters){
        ArrayList list = new ArrayList();
        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);


            if(parameters!=null){
                for (int i = 0; i < parameters.length; i++) {
                    pstmt.setString(i+1, parameters[i]);
                }
            }
            System.out.println(pstmt);
            rs = pstmt.executeQuery();

            ResultSetMetaData rsmd = rs.getMetaData();
            int column = rsmd.getColumnCount();//这里可以得到你查询语句返回的总的列数

            while (rs.next()) {
                Object[] ob = new Object[column];//对象数组,表示一行数据
                for (int i = 0; i < column; i++) {
                    ob[i] = rs.getObject(i+1);
                }
                list.add(ob);
            }

            return list;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally{
            //关闭资源
            close(rs, pstmt, conn);
        }

    }

}

8.Hibernate工具类

package com.huihui.util;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

final public class HibernateUtil {
    private static SessionFactory sessionFactory = null;
    // 使用线程局部模式
    private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

    private HibernateUtil() {
    }

    static {
        sessionFactory = new Configuration().configure().buildSessionFactory();
    }

    // 获取一个全新的Session
    public static Session openSession() {
        return sessionFactory.openSession();
    }

    // 获取和线程关联的Session
    public static Session getCurrentSession() {
        Session session = threadLocal.get();
        // 判断是否得到了
        if (session == null) {
            session = sessionFactory.openSession();
            // 把session对象设置到threadLocal中去,相当于该Session已经和线程绑定
            threadLocal.set(session);
        }
        return session;
    }

    //统一的修改和删除
    public static void executeUpdate(String hql,String[] parameters){
        Session session = null;
        Transaction transaction = null;
        try {
            session = openSession();
            transaction = session.beginTransaction();
            Query query = session.createQuery(hql);
            if(parameters!=null&&parameters.length>0){
                for (int i = 0; i < parameters.length; i++) {
                    query.setString(i, parameters[i]);
                }
            }
            query.executeUpdate();
            transaction.commit();
        } catch (Exception e) {
            if(transaction!=null){
                transaction.rollback();
            }
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally{
            if(session!=null&&session.isOpen()){
                session.close();
            }
        }
    }

    //统一的添加方法
    public static void save(Object obj){
        Session session = null;
        Transaction transaction = null;
        try {
            session = openSession();
            transaction = session.beginTransaction();
            session.save(obj);
            transaction.commit();
        } catch (Exception e) {
            if(transaction!=null){
                transaction.rollback();
            }
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally{
            if(session!=null&&session.isOpen()){
                session.close();
            }
        }
    }

    //提供返回只有一个结果的查询(一个结果)
    public static Object executeQueryForOne(String hql,String[] parameters){
        Object o = null;
        Session session  = null;
        try {
            session = openSession();
            Query query = session.createQuery(hql);
            if(parameters!=null&&parameters.length>0){
                for (int i = 0; i < parameters.length; i++) {
                    query.setString(i, parameters[i]);
                }
            }
            o = query.uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally{
            if(session!=null&&session.isOpen()){
                session.close();
            }
        }

        return o;
    }

    // 提供一个统一的查询方法(带分页)
    public static List executeQueryByPage(String hql, String[] parameters,
            int pageSize, int pageNow) {
        List list = null;
        Session session = null;
        try {
            session = openSession();
            Query query = session.createQuery(hql);
            if(parameters!=null&&parameters.length>0){
                for (int i = 0; i < parameters.length; i++) {
                    query.setString(i, parameters[i]);
                }
            }
            query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize);
            list = query.list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally{
            if(session!=null&&session.isOpen()){
                session.close();
            }
        }

        return list;
    }

    // 提供统一的查询方法.hql形式:from 类 where 条件=?...(多个结果)
    public static List executeQuery(String hql, String[] parameters) {
        Session session = null;
        Transaction transaction = null;
        List list = null;
        try {
            session = getCurrentSession();
            transaction = session.beginTransaction();
            Query query = session.createQuery(hql);
            if (parameters != null && parameters.length > 0) {
                for (int i = 0; i < parameters.length; i++) {
                    query.setString(i, parameters[i]);
                }
            }
            list = query.list();
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
            session = null;
        }

        return list;
    }

}

9.图片验证码生成器

基础的验证码包括了数字、字母、甚至可能有汉字。下面我给出一个简单的工具类

package com.huihui.test5;



import java.awt.Color;

import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * 验证码生成器
 */
public class ValidateCode {

    // 图片的宽度。
    private int width = 160;
    // 图片的高度。
    private int height = 40;
    // 验证码字符个数
    private int codeCount = 5;
    // 验证码干扰线数
    private int lineCount = 150;
    // 验证码
    private static String code = null;
    // 验证码图片Buffer
    private BufferedImage buffImg = null;

    private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',
            'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };

    public ValidateCode() {
        this.createCode();
    }

    /**
     * 
     * @param width
     *            图片宽
     * @param height
     *            图片高
     */
    public ValidateCode(int width, int height) {
        this.width = width;
        this.height = height;
        this.createCode();
    }

    /**
     * 
     * @param width
     *            图片宽
     * @param height
     *            图片高
     * @param codeCount
     *            字符个数
     * @param lineCount
     *            干扰线条数
     */
    public ValidateCode(int width, int height, int codeCount, int lineCount) {
        this.width = width;
        this.height = height;
        this.codeCount = codeCount;
        this.lineCount = lineCount;
        this.createCode();
    }

    public void createCode() {
        int x = 0, fontHeight = 0, codeY = 0;
        int red = 0, green = 0, blue = 0;

        x = width / (codeCount + 1);// 每个字符的宽度
        fontHeight = height - 2;// 字体的高度
        codeY = height - 3;

        // 图像buffer
        buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = buffImg.createGraphics();
        // 生成随机数
        Random random = new Random();
        // 将图像填充为白色
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        // 创建字体
        ImgFontByte imgFont = new ImgFontByte();
        Font font = imgFont.getFont(fontHeight);
        g.setFont(font);
        for (int i = 0; i < lineCount; i++) {
            int xs = random.nextInt(width);
            int ys = random.nextInt(height);
            int xe = xs + random.nextInt(width / 8);
            int ye = ys + random.nextInt(height / 8);
            red = random.nextInt(255);
            green = random.nextInt(255);
            blue = random.nextInt(255);
            g.setColor(new Color(red, green, blue));
            g.drawLine(xs, ys, xe, ye);
        }
        // randomCode记录随机产生的验证码
        StringBuffer randomCode = new StringBuffer();
        // 随机产生codeCount个字符的验证码。
        for (int i = 0; i < codeCount; i++) {
            String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
            // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。
            red = random.nextInt(255);
            green = random.nextInt(255);
            blue = random.nextInt(255);
            g.setColor(new Color(red, green, blue));
            g.drawString(strRand, (i + 1) * x, codeY);
            // 将产生的四个随机数组合在一起。
            randomCode.append(strRand);
        }
        // 将四位数字的验证码保存到Session中。
        code = randomCode.toString();
    }

    public void write(String path,String fileName) throws IOException {
        File folder = new File(path);
        if(!folder.exists()){
            folder.mkdirs();
        }
        OutputStream sos = new FileOutputStream(path+fileName);
        this.write(sos);
    }

    public void write(OutputStream sos) throws IOException {
        ImageIO.write(buffImg, "png", sos);
        sos.close();
    }

    public BufferedImage getBuffImg() {
        return buffImg;
    }

    public String getCode() {
        return code;
    }

    public static void main(String[] args) {  
        ValidateCode vCode = new ValidateCode(120,40,5,50);  
        try {  
            String path="C:\\Users\\Administrator\\Desktop\\";  
            System.out.println(vCode.getCode()+" >"+path);  
            vCode.write(path,new Date().getTime()+".png");  
        } catch (IOException e) {  
            e.printStackTrace();
        }  
     }

}

下面这个类主要是用作字体的设置:

package com.huihui.test5;


import java.awt.Font;
import java.io.ByteArrayInputStream;

public class ImgFontByte {
     public Font getFont(int fontHeight){  
            try {  
                Font baseFont = Font.createFont(Font.ITALIC, new ByteArrayInputStream(hex2byte(getFontByteStr()))); 
                return baseFont.deriveFont(Font.PLAIN, fontHeight);  
            } catch (Exception e) {  
                return new Font("Consola",Font.PLAIN, fontHeight);  
            }  
        }  

        private  byte[] hex2byte(String str) {   
            if (str == null)  
                return null;  
            str = str.trim();  
            int len = str.length();  
            if (len == 0 || len % 2 == 1)  
                return null;  
            byte[] b = new byte[len / 2];  
            try {  
                for (int i = 0; i < str.length(); i += 2) {  
                    b[i/2] = (byte) Integer.decode("0x" + str.substring(i, i + 2)).intValue();  
                }  
                return b;  
            } catch (Exception e) {  
                return null;  
            }  
        } 

     /** 
      * ttf字体文件的十六进制字符串 
      * @return 
      */  
     private String getFontByteStr(){ 
         return null;  
     }  
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值