看了部分相关使用博文中互相复制粘贴失了原有的格式。本文主要目的为整理常用类,成为自用的一个快速搜索列表。
最近的一篇关于这个工具包的博文是《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进行各种操作,克隆对象,属性等等. |
Betwixt | XML与Java对象之间相互转换. |
Codec | 处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等. |
Collections | java集合框架操作. |
Compress | java提供文件打包 压缩类库. |
Configuration | 一个java应用程序的配置管理类库. |
DBCP | 提供数据库连接池服务. |
DbUtils | 提供对jdbc 的操作封装来简化数据查询和记录读取操作. |
java发送邮件 对javamail的封装. | |
FileUpload | 提供文件上传功能. |
HttpClien | 提供HTTP客户端与服务器的各种通讯操作. 现在已改成HttpComponents |
IO | io工具的封装. |
Lang | Java基本对象方法的工具类包 如:StringUtils,ArrayUtils等等. |
Logging | 提供的是一个Java 的日志接口. |
Validator | 提供了客户端和服务器端的数据验证框架. |
文章基本都把它列为最重要的部分。应用及其广泛。
主要用来组装对象,包含设置、赋值、克隆的一系列操作。只有你想不到,没有他没写到。
这里我注意了一点,和我用过的反射机制一样,可以通过PropertyUtils获取私有属性的值。
另外有文章说Struts的创始人Craig McClanahan是BeanUtils的作者之一。难怪用的时候让我不停地想起曾经折腾过得的配置javabean。
第二个讲的是Codec,本质上就是编码解码,加密解密,encode,decode,方法名称都和以前用过得很接近。
广泛地使用Base64, Hex, MD5,Phonetic and URLs
这个包也是个重量级的工具了,看了一个不错的分类方式:
=未完待续=
##4.Configuration ##
用来处理配置文件的,可以适配多种存储方式
正常的缓冲流套输入输出流
//标准代码:
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:/");
主要是一些公共的工具集合,比如对字符、数组的操作等等。
// 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>
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"));
其实没什么必要,业界多半用log4j logback等
log.error(“ERROR”);
log.debug(“DEBUG”);
log.warn(“WARN”);
log.info(“INFO”);
log.trace(“TRACE”);
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 网络时间协议
用来做压缩/打包文件
//创建压缩对象
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();
//官方示例:
//* 检查请求是否含有上传文件
// 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);
注意与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 类。