前面一段时间把commons包过了一遍,倒不是为了全面了解这些包的用法,而是为了能够大致了解这些包的功能,在平时需要用到的时候能够想到用它们而已。包含如下几种常用的commons包:
commons-lang
commons-collections
commons-io
commons-beanutils
对这些包最常用的类都试用了一下,很多方法好用但是都不常用,结合一般写code的经验,把最最常用的几种归纳如下。
1 数组Object-primitive转换问题
尽管jdk1.5之后Object和primitive已经实现了自动装箱拆箱,但是对于数组还是会遇到Object类型数组和primitive数组的转换问题,比如一个Integer[]和int[]的转换问题。
特别是当和list配置使用的时候,list只能够转化为Object类型数组,比如下面是一段常用代码:
List<Integer> intList=new ArrayList<Integer>();
intList.add(1);
intList.add(2);
Integer[] objectArray=intList.toArray(new Integer[0]);
int[] primitiveArray=ArrayUtils.toPrimitive(objectArray);
System.out.println(primitiveArray);//输出为[I@109a4c
System.out.println("intArray: " + ArrayUtils.toString(primitiveArray));//输出为intArray: {1,2}
这个时候使用ArrayUtils.toPrimitive和ArrayUtils.toObject方法就能够在Object数组和primitive数组之间进行方便的转换,否则也就不得不使用for循环去做转换操作了。
2 数组输出显示问题
在System.out或者写log的时候,和各个Collection类分别覆盖了toString()方法不同,数组的System.out默认就是"[I@109a4c"这种方式的字符串,其中"[I"标识是数组类型,"@109a4c"就是对象标识了。
使用ArrayUtils的toString则能够实现数组的输出,如上面的代码示例。
3 数组的add或者sub操作
对于Object类型数组来说,是很好处理的,比如可以使用泛型操作写一个工具类兼容各种类型,但是对于primitive数组来说,就不能自己写方法了。
ArrayUtils的addAll,subarray方法提供了对primitive数组进行处理的方法。
另外java.util.Arrays类也提供了部分方法。
4 List初始化和赋值问题
new一个List然后接着对其赋值是一个很麻烦的操作,比如写代码的时候很讨厌new一个ArrayList出来,然后不停地add,比如如下的代码:
List<Integer> intList=new ArrayList<Integer>();
intList.add(1);
intList.add(2);
因此希望能够向数组那样在new的同时进行初始化,比如:
int[] intArrays=new int[]{1,2};
java.util.Arrays类提供了asList方法,如下:
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
但是使用这个方法的时候需要注意,代码里面return new ArrayList<T>(a);其实返回的是一个java.util.Array.ArrayList类,而不是我们常用的java.util.ArrayList,这个ArrayList是没有实现add方法的,所以说是一个不能扩展的list,使用的时候需要特别小心。
对于这个问题,commons包也没有什么方便方法,但是google collection包倒是提供了Lists.newArrayList方法解决了问题,比如:
List<Integer> intList = Lists.newArrayList(1,2);
因此使用的时候可以使用该方法,或者自己实现一个,也比较简单。
5 输入输出和文件读写
commons-io包中的IOUtils类提供了很多IO的方便方法,最主要的是copy方法,提供输入输出流之间的转换,包含了 inputstream,outputstream,reader,writer这几种常用的类。如下代码所示:
InputStream in = new FileInputStream("NOTICE.txt");
OutputStream out =new FileOutputStream("NOTICE1.txt");
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);//完成了文件读写
Reader reader = new FileReader("NOTICE1.txt");
IOUtils.copy(reader, System.out);//完成了文件输出到控制台
IOUtils.closeQuietly(reader);
另外IOUtils.toString则能够很方便地将文件内容返回为String,如下所示:
InputStream in = new FileInputStream("NOTICE.txt");
String content=IOUtils.toString(in);
6 Collection和Map的遍历处理
common-Collections包提供了对Collection进行遍历然后对每个对象进行处理的方法,在实际中很有用。
Closure closure = new Closure() {
public void execute(Object input) {
StringBuffer sb = (StringBuffer) input;
sb.append("append by closure!");
}
};
Set<StringBuffer> bufferSet = new HashSet<StringBuffer>();
bufferSet.add(new StringBuffer());
bufferSet.add(new StringBuffer());
CollectionUtils.forAllDo(bufferSet, closure);
System.out.println(ArrayUtils.toString(bufferSet));
另外对于Map的遍历,采用了迭代器MapIterator对Map进行迭代访问,而不用采用map.keySet().iterator()这种麻烦的方式,如下所示。
Map bidiMap=new HashMap();
MapIterator it = bidiMap.mapIterator();
while (it.hasNext()) {
Object key = it.next();
Object value = it.getValue();
System.out.println(key + "*****" + value);
}
此外也提供了OrderedMap来达到FIFO,按照put的顺序自动排序的Map,而不需要构造Compare进行排序。
OrderedMap map = new LinkedMap();
map.put("FIVE", "5");
map.put("SIX", "6");
map.put("SEVEN", "7");
System.out.println(map.firstKey()); // returns "FIVE"
System.out.println(map.nextKey("FIVE")); // returns "SIX"
System.out.println(map.nextKey("SIX")); // returns "SEVEN"
分享到:
相关推荐
Apache Commons 是一个由 Apache 软件...总结起来,Apache Commons 是一个强大且实用的 Java 类库集合,涵盖了许多开发中常见的任务。通过深入学习和实践,我们可以更好地利用这些工具,提高代码效率,降低开发难度。
在标题"commons-logging-1.2_commonslogging_"中提到的"commons-logging-1.2.jar"就是这个库的1.2版本,它是Spring框架中常用的一个依赖,用于处理日志记录。 Spring框架广泛使用Commons Logging作为其默认的日志...
总结来说,Apache Commons DBCP和Apache Commons Pool是Java开发中用于数据库连接池管理的重要工具。它们通过对象池策略提高了数据库操作的效率和响应速度,但在选择时也应考虑到其版本的更新情况和技术发展的趋势。
Apache Commons Codec库中的Hex类提供了方便的hex编码和解码方法,可以用于在程序中以十六进制形式存储或显示二进制数据,这在日志记录、数据交换和调试时非常实用。 三、MD5加密: MD5(Message-Digest Algorithm ...
总结来说,`commons-fileupload.jar`和`commons-io.jar`在SpringMVC+Mybatis的环境中,为图片上传提供了基础功能,包括文件的解析、存储、读写等。通过它们,开发者可以构建出安全、高效、易于维护的文件上传系统。...
总结来说,Apache Commons Daemon通过Procrun工具使Java应用程序能够无缝集成到Windows服务框架中,确保了Java应用的稳定运行和系统级别的管理能力。通过正确配置和使用,我们可以实现Java应用的自动化管理和监控,...
总结来说,Apache Commons Logging作为一个中间层日志API,通过提供统一的接口,解耦了日志记录的实现细节,使得开发者可以在不修改代码的情况下更换日志系统,增强了应用程序的可移植性和可维护性。在项目中使用...
总结来说,`commons-io`和`commons-fileupload`库为Java开发者提供了方便、高效且健壮的文件上传解决方案。通过它们,我们可以轻松地处理来自客户端的文件上传请求,确保数据的安全性和稳定性。在实际应用中,还需要...
总结,Apache Commons IO库通过提供一系列高效且易用的工具类,极大地简化了Java开发中的I/O操作。无论是在处理文件、流、数据转换还是对象序列化方面,它都能显著提高开发效率,降低代码复杂度,是Java开发者不可或...
总结来说,Apache Commons Logging-1.2是一个为Java应用程序提供日志服务的工具包,它的核心优势在于其灵活性和可扩展性,使得开发者可以根据需求轻松更换日志实现。通过下载和使用这个"commons-logging-1.2-bin.zip...
总结来说,Apache Commons BeanUtils是一个强大的工具,它简化了JavaBean对象的属性操作,提高了代码的可读性和可维护性。`commons-beanutils-1.8.3.jar`作为其特定版本,提供了稳定可靠的API,是Java开发者的得力...
总结来说,Apache Commons-Validator 是一个强大且灵活的验证工具,能够帮助开发者创建健壮的数据验证机制,确保输入数据的质量,从而减少应用程序中的错误和异常。无论是对于Struts框架还是其他任何Java Web应用,...
Apache Commons Collections是Java开发中常用的一个开源库,它为Java集合框架提供了大量的实用工具类和扩展。"commons-collections-3.2.jar"是该库的版本3.2的实现,它包含了一系列高效、实用且功能丰富的数据结构和...
总结来说,`commons-fileupload-1.2.1.jar`和`commons-io-1.3.2.jar`是Java Web应用中处理文件上传的必备工具,它们提供了丰富的功能和良好的性能,简化了开发流程,使开发者可以专注于业务逻辑而不是底层细节。
总结,Apache Commons Net 3.3为Java开发者提供了强大且全面的网络协议工具,尤其是FTP功能,使得FTP编程变得简单高效。无论你是新手还是经验丰富的开发者,这个库都将是你的得力助手,帮助你在网络通信领域游刃有余...
总结来说,Apache Commons Net 3.2是一个强大的Java网络库,提供了多种网络协议的实现,对于需要在网络编程中进行文件传输、远程控制、邮件发送等操作的开发者来说,是一个非常有价值的工具。源代码和示例的存在...
总结,Apache Commons Net 3.6是Java开发中处理FTP操作的强大工具,它提供了一套全面的API,使得FTP文件的上传下载、读写等操作变得简单易行。通过深入研究源码,开发者不仅可以提升代码质量,还能更好地理解和应对...
总结来说,"commons的jar包"是Java开发中的宝贵资源,涵盖了许多实用工具类,可以帮助开发者更高效地完成日常编程任务。通过深入理解和熟练使用这些组件,可以提升个人或团队的开发能力和项目质量。在实际工作中,...
总结来说,Apache Commons BeanUtils是Java开发中的得力助手,它极大地提高了处理JavaBean对象的效率,减少了代码的冗余,同时也为处理复杂的数据操作提供了便利。通过使用这个库,开发者可以更专注于业务逻辑,而非...