常用工具jar包详解(很详细_文档中有源码实例)

本文介绍了Java中常用的工具库,包括commons-io、commons-beanutils、commons-digester、commons-lang以及commons-codec,详述了它们的主要功能和应用场景。同时,文章讲解了如何使用commons-dbutils简化数据库操作,以及commons-email和commons-chain的用途。最后,展示了使用commons-fileupload实现文件上传到指定目录的Servlet示例。
摘要由CSDN通过智能技术生成

commons-io.jar

可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Streamreaderwriter实现.

commons-beanutils.jar

提供对Java 反射和自省API的包装,主要提供了对于JavaBean进行各种操作。
commons-digester.jar:

它能方便地将XML文档所定义的元素转化为JAVA对象,其实它的用法有点象栈(当然内在的原理就是那个古老的东西,只是提供了更高一层的封装)

commons-lang.jsr:

它 扩展了标准 java.lang API,增加了字符串操作方法、基本数值方法、对象反射、创建和串行化以及 System 属性。它还包含一个可继承的 enum 类型、对多种嵌套的 Exception 类型的支持、对 java.util.Date 的增强以及用于构建方法的实用程序,例如 自动生成 toString() 的结果、自动实现 hashCode() 和 equals() 方法、数组操作、枚举、日期和时间的处理等等。

·         ArrayUtils 用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等;

·         BitField 用于操作位元,提供了一些方便而安全的方法;

·         BooleanUtils 用于操作和转换boolean或者Boolean及相应的数组;

·         CharEncoding 包含了Java环境支持的字符编码,提供是否支持某种编码的判断;

·         CharRange 用于设定字符范围并做相应检查;

·         CharSet 用于设定一组字符作为范围并做相应检查;

·         CharSetUtils 用于操作CharSet

·         CharUtils 用于操作char值和Character对象;

·         ClassUtils 用于对Java类的操作,不使用反射;

·         ObjectUtils 用于操作Java对象,提供null安全的访问和其他一些功能;

·         RandomStringUtils 用于生成随机的字符串;

·         SerializationUtils 用于处理对象序列化,提供比一般Java序列化更高级的处理能力;

·         StringEscapeUtils 用于正确处理转义字符,产生正确的JavaJavaScriptHTMLXMLSQL代码;

·         StringUtils 处理String的核心类,提供了相当多的功能;

·         SystemUtils java.lang.System基础上提供更方便的访问,如用户路径、Java版本、时区、操作系统等判断;

·         Validate 提供验证的操作,有点类似assert断言;

·         WordUtils 用于处理单词大小写、换行等。

 

commons-codec.jar:

包含一些通用的编码解码算法。包括一些语音编码器, Hex, Base64, 以及URL encoder。

Java代码  

 

// MD5   
 String str = "abc";    
 DigestUtils.md5Hex(str);    
// SHA1   
String str = "abc";    
 DigestUtils.shaHex(str);    
      
 // BASE64   
 // 加密   
 String str= "abc"; // abc为要加密的字符串   
byte[] b = Base64.encodeBase64(str.getBytes(),true);    
System.out.println(newString(b));    
// 解密   
String str = "YWJj"; // YWJj为要解密的字符串   
byte[] b =Base64.decodeBase64(str.getBytes());    
System.out.println(newString(b)); 

 

commons-collections .jar:

提供一个类包来扩展和增加标准的 Java Collection框架。

·         Bag接口:适用于包含一个对象的多个拷贝的集合

·         Buffer接口:适用于具有顺序的集合类,例如FIFOs(先进先出)

·         BidiMap(双向映射):可以通过值查找键,也可以通过键查找值

·         Map迭代器:提供了对映射的快速迭代

·         对类型检查进行了封装,确保特定类的实例可以被添加到集合中

·         对转换进行了封装,将集合中的对象转换成被加入时的类型

·         对集合进行组合,使多个集合看起来就像一个集合一样

·         有序映射和set,保持元素添加时的顺序,包括一个基于LRU的map

·         标识映射可以给予对象的==来比较对象,而不是基于equals方法

·         引用映射可以允许键and/or值可以有控制的进行回收

·         很多比较器的实现

·         很多迭代器的实现

·         从数组或者枚举到集合的适配器

·         用来测试或者创建典型set理论的集合属性,例如与、或、闭包

 

commons-dbutil.jar:

对传统操作数据库的类进行二次封装,可以把结果集转化成 List

(1)org.apache.commons.dbutils

DbUtils  : 提供如关闭连接、装载 JDBC 驱动程序等常规工作的工具类

QueryRunner : 该类简单化了 SQL 查询,它与 ResultSetHandler 组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。

QueryLoader : 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。

 

(2)org.apache.commons.dbutils.handlers

ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]

BeanHandler :将ResultSet中第一行的数据转化成类对象

BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象

ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象

KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据

MapHandler :将ResultSet中第一行的数据存成Map映射

MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map

ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

 

(3)org.apache.commons.dbutils.wrappers

SqlNullCheckedResultSet :该类是用来对sql语句执行完成之后的的数值进行null的替换。

StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()

 

Java代码  

        import java.sql.Connection;  

        import java.sql.DriverManager;  

       import java.sql.SQLException;  

        import java.util.List;  

        import java.util.Map;  

        importorg.apache.commons.dbutils.DbUtils;  

        import org.apache.commons.dbutils.QueryRunner;  

        importorg.apache.commons.dbutils.handlers.MapListHandler;  

        public class DbutilsJDBCTest{  

         public static voidmain(String[] args) {  

             Connectionconn = null;  

             StringjdbcURL = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";  

             StringjdbcDriver = "com.mysql.jdbc.Driver";  

             try {  

                 DbUtils.loadDriver(jdbcDriver);  

                //Username "root". Password "root" 

                 conn =DriverManager.getConnection(jdbcURL, "root", "root");  

                 QueryRunner qRunner = new QueryRunner();  

                System.out.println("***UsingMapListHandler***");  

                 //以下部分代码采用Map存储方式,可以采用Bean的方式代替进行处理 

                 List lMap= (List) qRunner.query(conn,  

                         "selecttitle,authors  from books", new MapListHandler());  

                //以下是处理代码,可以抽取出来 

    System.out.println("title ------------- authors");  

                     for (int i = 0; i < lMap.size(); i++) {  

                             Map vals = (Map)lMap.get(i);  

                             System.out.println(vals.get("title")+"-------------"+vals.get("authors"));  

                     }  

             } catch (SQLException ex) {  

                 ex.printStackTrace();  

             } finally {  

                 DbUtils.closeQuietly(conn);  

             }  

         }  

   }  

     /**

     上例在处理结果集时,它把数据库中的每一行映射成一个Map,其中列名作为Key,该列对应的值作为Value存放,

     查询的所有的数据一起放在一个List里,然后进行处理,当然,一个更明智的处理是直接返回List然后再单独进行处理。

     事实上上例返回的结果集中的每一行不必放在一个Map里,你可以放在一个Bean里,

     

     如果使用Bean而不是用Map,那么,你也许需要建立一个Bean,如下:

     **/ 
     package cn.qtone.test;  
     public class Book {  
         publicint id;  
         public String title;  
         public String authors ;  
         public StudentBean() {  
         }  
         public String getAuthors() {  
             return authors;  
         }  
        public void setAuthors(String authors) {  
             this.authors = authors;  
         }  
         public int getId() {  
             return id;  
         }  
         public void setId(int id){  
             this.id = id;  
        }  
         public String getTitle() {  
            return title;  
         }  
        public void setTitle(String title) {  
            this.title = title;  
        }  
     }  
     /**
     然后简单修改一下DbutilsJDBCTest 中的部分代码即可,代替之后的源代码如下:
     **/ 
       
     import java.sql.Connection;  
     import java.sql.DriverManager;  
     import java.sql.SQLException;  
     import java.util.List;  
     import java.util.Map;  
     importorg.apache.commons.dbutils.DbUtils;  
     importorg.apache.commons.dbutils.QueryRunner;  
     importorg.apache.commons.dbutils.handlers.BeanListHandler;  
       
     public class DbutilsJDBCTest{  
         public static voidmain(String[] args) {  
             Connection conn = null;  
             StringjdbcURL ="jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";  
             StringjdbcDriver = "com.mysql.jdbc.Driver";  
             try {  
                DbUtils.loadDriver(jdbcDriver);  
                 // Username "root".Password "root" 
                 conn =DriverManager.getConnection(jdbcURL, "root", "root");  
                 QueryRunner qRunner = new QueryRunner();  
                 System.out.println("***UsingBeanListHandler ***");  
                 //以下部分代码采用Map存储方式,可以采用Bean的方式代替进行处理 
     List lBeans = (List) qRunner.query(conn," selecttitle,authors from books ", newBeanListHandler(Book.class));  
         //以下是处理代码,可以抽取出来 
     System.out.println("title ------------- authors");  
         for (int i = 0; i < lBeans.size(); i++) {  
                 Book vals= (Book) lBeans.get(i);      
               System.out.println(vals.getTitle()+"-------------"+ vals. getAuthors ());  
                  }  
        } catch (SQLException ex) {  
              ex.printStackTrace();  
          } finally {  
              DbUtils.closeQuietly(conn);  
          }  
     }  
  }  
  /**
  采用Map的方式即第一种方式性能要好的多,采用Bean性能比较低可能是因为采用反射的缘故,
  采用反射的东东性能和不采用反射的还是有点差距。
  **/ 

 

commons-mail.jar:

是对JavaMail进行封装从而简化其操作,
功能:简单文本邮件、带附件的邮件、HTML格式的邮件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值