Apache Commons的小结

6 篇文章 0 订阅
看文时发现老铁一句“不了解Apache Commons的java程序员不算java程序员”,瞬间扎铁了。赶紧搜了一下,发现这里面有些类是用过的,只是没有对它有个总体的印象

看了部分相关使用博文中互相复制粘贴失了原有的格式。本文主要目的为整理常用类,成为自用的一个快速搜索列表。

最近的一篇关于这个工具包的博文是《apache-commons家族的八兄弟
主要列出了

组件

功能介绍

beanUtils

提供了对于JavaBean进行各种操作,克隆对象,属性等等.

codec

处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等.

collections

java集合框架操作.

configuration

一个java应用程序的配置管理类库.

io

io工具的封装.

lang

Java基本对象方法的工具类包 如:StringUtils,ArrayUtils等等.

logging

提供的是一个Java 的日志接口.

net

提供了客户端和服务器端的数据验证框架.

另一篇博文是https://blog.csdn.net/zs064811/article/details/51601912

组件功能介绍
BeanUtils提供了对于JavaBean进行各种操作,克隆对象,属性等等.
BetwixtXML与Java对象之间相互转换.
Codec处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等.
Collectionsjava集合框架操作.
Compressjava提供文件打包 压缩类库.
Configuration一个java应用程序的配置管理类库.
DBCP提供数据库连接池服务.
DbUtils提供对jdbc 的操作封装来简化数据查询和记录读取操作.
Emailjava发送邮件 对javamail的封装.
FileUpload提供文件上传功能.
HttpClien提供HTTP客户端与服务器的各种通讯操作. 现在已改成HttpComponents
IOio工具的封装.
LangJava基本对象方法的工具类包 如:StringUtils,ArrayUtils等等.
Logging提供的是一个Java 的日志接口.
Validator提供了客户端和服务器端的数据验证框架.

1.BeanUtils

文章基本都把它列为最重要的部分。应用及其广泛。
主要用来组装对象,包含设置、赋值、克隆的一系列操作。只有你想不到,没有他没写到。
这里我注意了一点,和我用过的反射机制一样,可以通过PropertyUtils获取私有属性的值。
另外有文章说Struts的创始人Craig McClanahan是BeanUtils的作者之一。难怪用的时候让我不停地想起曾经折腾过得的配置javabean。

2.Codec

第二个讲的是Codec,本质上就是编码解码,加密解密,encode,decode,方法名称都和以前用过得很接近。
广泛地使用Base64, Hex, MD5,Phonetic and URLs

3.Collections

这个包也是个重量级的工具了,看了一个不错的分类方式:

  1. 容器类:如Collection、List、Map等,用于存放对象和进行简单操作的;
  2. 操作类:如Collections、Arrays等,用于对容器类的实例进行相对复杂操作如排序等;
  3. 辅助类:如Iterator、Comparator等,用于辅助操作类以及外部调用代码实现对容器类的操作,所谓辅助,概括而通俗的来讲,就是这些类提供一种算法,你给它一个对象或者一组对象,或者仅仅是按一定的规则调用它,它给你一个运算后的答案,帮助你正确处理容器对象。比如Iterator会告诉你容器中下一个对象有没有、是什么,而Comparator将对象大小/先后次序的算法逻辑独立出来。

=未完待续=

##4.Configuration ##
用来处理配置文件的,可以适配多种存储方式

  1. Properties files
  2. XML documents
  3. Property list files (.plist)
  4. JNDI
  5. JDBC Datasource
  6. System properties
  7. Applet parameters
  8. Servlet parameters
    PropertiesConfiguration config = new PropertiesConfiguration(“usergui.properties”);
    config.setProperty(“colors.background”, "#000000);
    config.save();
    config.save("usergui.backup.properties);//save a copy
    Integer integer = config.getInteger(“window.width”);

5.IO

正常的缓冲流套输入输出流
//标准代码:
InputStream in = new URL( “http://jakarta.apache.org” ).openStream();
try {
InputStreamReader inR = new InputStreamReader( in );
BufferedReader buf = new BufferedReader( inR );
String line;
while ( ( line = buf.readLine() ) != null ) {
System.out.println( line );
}
} finally {
in.close();
}
//使用IOUtils
InputStream in = new URL( “http://jakarta.apache.org” ).openStream();
try {
System.out.println( IOUtils.toString( in ) );
} finally {
IOUtils.closeQuietly(in);
}

//2.读取文件  
File file = new File("/commons/io/project.properties");  
List lines = FileUtils.readLines(file, "UTF-8");  
//3.察看剩余空间  
long freeSpace = FileSystemUtils.freeSpace("C:/"); 

6.Lang

主要是一些公共的工具集合,比如对字符、数组的操作等等。
// 1 合并两个数组: org.apache.commons.lang. ArrayUtils
// 有时我们需要将两个数组合并为一个数组,用ArrayUtils就非常方便,示例如下:
private static void testArr() {
String[] s1 = new String[] { “1”, “2”, “3” };
String[] s2 = new String[] { “a”, “b”, “c” };
String[] s = (String[]) ArrayUtils.addAll(s1, s2);
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
String str = ArrayUtils.toString(s);
str = str.substring(1, str.length() - 1);
System.out.println(str + “>>” + str.length());
}
//2 截取从from开始字符串
StringUtils.substringAfter("SELECT * FROM PERSON ", “from”);
//3 判断该字符串是不是为数字(0~9)组成,如果是,返回true 但该方法不识别有小数点和 请注意
StringUtils.isNumeric(“454534”); //返回true
//4.取得类名
System.out.println(ClassUtils.getShortClassName(Test.class));
//取得其包名
System.out.println(ClassUtils.getPackageName(Test.class));

       //5.NumberUtils  
       System.out.println(NumberUtils.stringToInt("6"));  
       //6.五位的随机字母和数字  
       System.out.println(RandomStringUtils.randomAlphanumeric(5));  
       //7.StringEscapeUtils  
       System.out.println(StringEscapeUtils.escapeHtml("<html>"));  
       //输出结果为&lt;html&gt;  
       System.out.println(StringEscapeUtils.escapeJava("String"));  
        
       //8.StringUtils,判断是否是空格字符  
       System.out.println(StringUtils.isBlank("   "));  
       //将数组中的内容以,分隔  
       System.out.println(StringUtils.join(test,","));  
       //在右边加下字符,使之总长度为6  
       System.out.println(StringUtils.rightPad("abc", 6, 'T'));  
       //首字母大写  
       System.out.println(StringUtils.capitalize("abc"));  
       //Deletes all whitespaces from a String 删除所有空格  
       System.out.println( StringUtils.deleteWhitespace("   ab  c  "));  
       //判断是否包含这个字符  
       System.out.println( StringUtils.contains("abc", "ba"));  
       //表示左边两个字符  
       System.out.println( StringUtils.left("abc", 2));  
       System.out.println(NumberUtils.stringToInt("33"));  

7.logging

其实没什么必要,业界多半用log4j logback等
log.error(“ERROR”);
log.debug(“DEBUG”);
log.warn(“WARN”);
log.info(“INFO”);
log.trace(“TRACE”);

8.net

Apache Commons Net™库实现了许多基本Internet协议的客户端。该库的目的是提供基本协议访问,而不是更高级别的抽象。因此,一些设计违反了面向对象的设计原则。我们的理念是尽可能使协议的全局功能可访问(例如,TFTP发送文件和接收文件),但也提供对适用的基本协议的访问,以便程序员可以构建自己的自定义实现(例如,TFTP)数据包类和TFTP数据包的发送和接收方法都是公开的)。

支持协议:
-FTP / FTPS
-FTP over HTTP(实验性)
-NNTP 网络新闻传输协议
-SMTP(S)简单邮件传输协议
-POP3(S)邮件协议版本3
-IMAP(S)邮件访问协议
-telnet 远程登录
-TFTP 简单文件传输协议
-finger
-whois 用来查询域名的IP以及所有者等信息的传输协议
-REXEC / RCMD /远程登录
-daytime(rdate)和白天
-echo
-discard
-NTP / SNTP 网络时间协议

  • FTP/FTPS
  • FTP over HTTP (experimental)
  • NNTP
  • SMTP(S)
  • POP3(S)
  • IMAP(S)
  • Telnet
  • TFTP
  • Finger
  • Whois
  • rexec/rcmd/rlogin
  • Time (rdate) and Daytime
  • Echo
  • Discard
  • NTP/SNTP

其他.Compress

用来做压缩/打包文件
//创建压缩对象
ZipArchiveEntry entry = new ZipArchiveEntry(“CompressTest”);
//要压缩的文件
File f=new File(“e:\test.pdf”);
FileInputStream fis=new FileInputStream(f);
//输出的对象 压缩的文件
ZipArchiveOutputStream zipOutput=new ZipArchiveOutputStream(new File(“e:\test.zip”));
zipOutput.putArchiveEntry(entry);
int i=0,j;
while((j=fis.read()) != -1)
{
zipOutput.write(j);
i++;
System.out.println(i);
}
zipOutput.closeArchiveEntry();
zipOutput.close();
fis.close();

其他.FileUpload

//官方示例:  
//* 检查请求是否含有上传文件  
    // Check that we have a file upload request  
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);  
  
    //现在我们得到了items的列表  
  
    //如果你的应用近于最简单的情况,上面的处理就够了。但我们有时候还是需要更多的控制。  
    //下面提供了几种控制选择:  
    // Create a factory for disk-based file items  
    DiskFileItemFactory factory = new DiskFileItemFactory();  
  
    // Set factory constraints  
    factory.setSizeThreshold(yourMaxMemorySize);  
    factory.setRepository(yourTempDirectory);  
  
    // Create a new file upload handler  
    ServletFileUpload upload = new ServletFileUpload(factory);  
  
    // 设置最大上传大小  
    upload.setSizeMax(yourMaxRequestSize);  
  
    // 解析所有请求  
    List /* FileItem */ items = upload.parseRequest(request);  
  
    // Create a factory for disk-based file items  
    DiskFileItemFactory factory = new DiskFileItemFactory(  
            yourMaxMemorySize, yourTempDirectory);  
  
    //一旦解析完成,你需要进一步处理item的列表。  
    // Process the uploaded items  
    Iterator iter = items.iterator();  
    while (iter.hasNext()) {  
        FileItem item = (FileItem) iter.next();  
  
        if (item.isFormField()) {  
            processFormField(item);  
        } else {  
            processUploadedFile(item);  
        }  
    }  
  
    //区分数据是否为简单的表单数据,如果是简单的数据:  
    // processFormField  
    if (item.isFormField()) {  
        String name = item.getFieldName();  
        String value = item.getString();  
        //...省略步骤  
    }  
  
    //如果是提交的文件:  
    // processUploadedFile  
    if (!item.isFormField()) {  
        String fieldName = item.getFieldName();  
        String fileName = item.getName();  
        String contentType = item.getContentType();  
        boolean isInMemory = item.isInMemory();  
        long sizeInBytes = item.getSize();  
        //...省略步骤  
    }  
  
    //对于这些item,我们通常要把它们写入文件,或转为一个流  
    // Process a file upload  
    if (writeToFile) {  
        File uploadedFile = new File(...);  
        item.write(uploadedFile);  
    } else {  
        InputStream uploadedStream = item.getInputStream();  
        //...省略步骤  
        uploadedStream.close();  
    }  
  
    //或转为字节数组保存在内存中:  
    // Process a file upload in memory  
    byte[] data = item.get();  
    //...省略步骤  
    //如果这个文件真的很大,你可能会希望向用户报告到底传了多少到服务端,让用户了解上传的过程  
    //Create a progress listener  
    ProgressListener progressListener = new ProgressListener(){  
       public void update(long pBytesRead, long pContentLength, int pItems) {  
           System.out.println("We are currently reading item " + pItems);  
           if (pContentLength == -1) {  
               System.out.println("So far, " + pBytesRead + " bytes have been read.");  
           } else {  
               System.out.println("So far, " + pBytesRead + " of " + pContentLength  
                                  + " bytes have been read.");  
           }  
       }  
    };  
    upload.setProgressListener(progressListener);  

其他lang.math

注意与math包的区分
在Jakarta Commons中,专门处理数学计算的类分别可以在两个地方找到:一是Commons Lang的org.apache.commons.lang.math包中,二是在Commons Math这个单独的子项目中。由于后者主要是处理复数、矩阵等。

org.apache.commons.lang.math包中共有10个类,这些类可以归纳成四组:
1.处理分数的 Fraction 类;
2.处理数值的 NumberUtils 类;
3.处理数值范围的 Range 、 NumberRange 、 IntRange 、 LongRange 、 FloatRange 、 DoubleRange 类;
4.处理随机数的 JVMRandom 和 RandomUtils 类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值