`
lighter
  • 浏览: 504647 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Apache Commons工具集简介[收藏]

阅读更多

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西,我只是做了一个汇总整理。

 

Commons BeanUtils

http://jakarta.apache.org/commons/beanutils/index.html

说明:针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装。

使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是Bean Copy,也就是copy bean的属性。如果做分层架构开发的话就会用到,比如从PO(Persistent Object)拷贝数据到VO(Value Object)。

传统方法如下:http://jakarta.apache.org/commons/cli/index.html

说明:这是一个处理命令的工具。比如main方法输入的string[]需要解析。你可以预先定义好参数的规则,然后就可以调用CLI来解析。

使用示例:http://jakarta.apache.org/commons/codec/index.html

说明:这个工具是用来编码和解码的,包括Base64,URL,Soundx等等。用这个工具的人应该很清楚这些,我就不多介绍了。

 

Commons Collections

http://jakarta.apache.org/commons/collections/

说明:你可以把这个工具看成是java.util的扩展。

使用示例:举一个简单的例子http://jakarta.apache.org/commons/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

使用示例:举一个Properties的简单例子

# usergui.properties, definining the GUI,

colors.background = #FFFFFF

colors.foreground = #000080

 

window.width = 500

window.height = 300http://jakarta.apache.org/commons/dbcp/

说明:Database Connection pool, Tomcat就是用的这个,不用我多说了吧,要用的自己去网站上看说明。

 

Commons DbUtils

http://jakarta.apache.org/commons/dbutils/

说明:我以前在写数据库程序的时候,往往把数据库操作单独做一个包。DbUtils就是这样一个工具,以后开发不用再重复这样的工作了。值得一体的是,这个工具并不是现在流行的OR-Mapping工具(比如Hibernate),只是简化数据库操作,比如http://jakarta.apache.org/commons/fileupload/

说明:jsp的上传文件功能怎么做呢?

使用示例:http://jakarta.apache.org/commons/httpclient/

说明:这个工具可以方便通过编程的方式去访问网站。

使用示例:最简单的Get操作

  1. //得到TeacherForm   
  2.   
  3.  TeacherForm teacherForm=(TeacherForm)form;   
  4.   
  5.  //构造Teacher对象   
  6.   
  7.  Teacher teacher=new Teacher();   
  8.   
  9.  //赋值   
  10.   
  11.  teacher.setName(teacherForm.getName());   
  12.   
  13.  teacher.setAge(teacherForm.getAge());   
  14.   
  15.  teacher.setGender(teacherForm.getGender());   
  16.   
  17.  teacher.setMajor(teacherForm.getMajor());   
  18.   
  19.  teacher.setDepartment(teacherForm.getDepartment());   
  20.   
  21.     
  22.   
  23.  //持久化Teacher对象到数据库   
  24.   
  25.  HibernateDAO= ;   
  26.   
  27.  HibernateDAO.save(teacher);  



 

使用BeanUtils后,代码就大大改观了,如下所示:

  1. //得到TeacherForm   
  2.   
  3.  TeacherForm teacherForm=(TeacherForm)form;   
  4.   
  5.  //构造Teacher对象   
  6.   
  7.  Teacher teacher=new Teacher();   
  8.   
  9.  //赋值   
  10.   
  11.  BeanUtils.copyProperties(teacher,teacherForm);   
  12.   
  13.  //持久化Teacher对象到数据库   
  14.   
  15.  HibernateDAO= ;   
  16.   
  17.  HibernateDAO.save(teacher);   


 

Commons CLI

  1. // create Options object   
  2.   
  3. Options options = new Options();   
  4.   
  5. // add t option, option is the command parameter, false indicates that   
  6.   
  7. // this parameter is not required.   
  8.   
  9. options.addOption(“t”, false, “display current time”);   
  10.   
  11. options.addOption("c"true"country code");   
  12.   
  13. CommandLineParser parser = new PosixParser();   
  14.   
  15. CommandLine cmd = parser.parse( options, args);   
  16.   
  17. if(cmd.hasOption("t")) {   
  18.   
  19.     // print the date and time   
  20.   
  21. }   
  22.   
  23. else {   
  24.   
  25.     // print the date   
  26.   
  27. }   
  28. String countryCode = cmd.getOptionValue("c");   
  29.   
  30. if(countryCode == null) {   
  31.   
  32. }   
  33.   
  34. else {   
  35.   
  36. }   
  37.   

 

Commons Codec

  1. OrderedMap map = new LinkedMap();   
  2.   
  3. map.put("FIVE""5");   
  4.   
  5. map.put("SIX""6");   
  6.   
  7. map.put("SEVEN""7");   
  8.   
  9. map.firstKey();  // returns "FIVE"   
  10.   
  11. map.nextKey("FIVE");  // returns "SIX"   
  12.   
  13. map.nextKey("SIX");  // returns "SEVEN"  



 

Commons Configuration

  1. PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");   
  2.   
  3. config.setProperty("colors.background""#000000);  
  4.  
  5. config.save();  
  6.  
  7. config.save("usergui.backup.properties);//save a copy   
  8.   
  9. Integer integer = config.getInteger("window.width");   


 

Commons DBCP

  1. QueryRunner run = new QueryRunner(dataSource);   
  2.   
  3. // Execute the query and get the results back from the handler   
  4.   
  5. Object[] result = (Object[]) run.query(   
  6.   
  7.     "SELECT * FROM Person WHERE name=?""John Doe");  



 

Commons FileUpload

  1. // Create a factory for disk-based file items   
  2.   
  3. FileItemFactory factory = new DiskFileItemFactory();   
  4.   
  5.     
  6.   
  7. // Create a new file upload handler   
  8.   
  9. ServletFileUpload upload = new ServletFileUpload(factory);   
  10.   
  11.     
  12.   
  13. // Parse the request   
  14.   
  15. List /* FileItem */ items = upload.parseRequest(request);   
  16.   
  17. // Process the uploaded items   
  18.   
  19. Iterator iter = items.iterator();   
  20.   
  21. while (iter.hasNext()) {   
  22.   
  23.     FileItem item = (FileItem) iter.next();   
  24.   
  25.     
  26.   
  27.     if (item.isFormField()) {   
  28.   
  29.         processFormField(item);   
  30.   
  31.     } else {   
  32.   
  33.         processUploadedFile(item);   
  34.   
  35.     }   
  36.   
  37. }   


 

Commons HttpClient

  1. GetMethod get = new GetMethod("http://jakarta.apache.org");   
  2.   
  3. // execute method and handle any error responses.   
  4.   
  5.   ...   
  6.   
  7. InputStream in = get.getResponseBodyAsStream();   
  8.   
  9. // Process the data from the input stream.   
  10.   
  11.  get.releaseConnection();   


 

Commons IO

http://jakarta.apache.org/commons/io/

说明:可以看成是java.io的扩展,我觉得用起来非常方便。

使用示例:

1.读取Stream

标准代码:

  1. InputStream in = new URL( "http://jakarta.apache.org" ).openStream();   
  2.   
  3.  try {   
  4.   
  5.    InputStreamReader inR = new InputStreamReader( in );   
  6.   
  7.    BufferedReader buf = new BufferedReader( inR );   
  8.   
  9.    String line;   
  10.   
  11.    while ( ( line = buf.readLine() ) != null ) {   
  12.   
  13.      System.out.println( line );   
  14.   
  15.    }   
  16.   
  17.  } finally {   
  18.   
  19.    in.close();   
  20.   
  21.  }   


使用IOUtils

  1. InputStream in = new URL( "http://jakarta.apache.org" ).openStream();   
  2.   
  3.  try {   
  4.   
  5.    System.out.println( IOUtils.toString( in ) );   
  6.   
  7.  } finally {   
  8.   
  9.    IOUtils.closeQuietly(in);   
  10.   
  11.  }  



2.读取文件

  1. File file = new File("/commons/io/project.properties");   
  2.   
  3. List lines = FileUtils.readLines(file, "UTF-8");   


 

3.察看剩余空间

  1. long freeSpace = FileSystemUtils.freeSpace("C:/");  



 

 

Commons JXPath

http://jakarta.apache.org/commons/jxpath/

说明:Xpath你知道吧,那么JXpath就是基于Java对象的Xpath,也就是用Xpath对Java对象进行查询。这个东西还是很有想像力的。

使用示例:

  1. Address address = (Address)JXPathContext.newContext(vendor).   
  2.   
  3.          getValue("locations[address/zipCode='90210']/address");   
  4.   
  5. 上述代码等同于   
  6.   
  7. Address address = null;   
  8.   
  9. Collection locations = vendor.getLocations();   
  10.   
  11. Iterator it = locations.iterator();   
  12.   
  13. while (it.hasNext()){   
  14.   
  15.     Location location = (Location)it.next();   
  16.   
  17.     String zipCode = location.getAddress().getZipCode();   
  18.   
  19.     if (zipCode.equals("90210")){   
  20.   
  21.       address = location.getAddress();   
  22.   
  23.       break;   
  24.   
  25.     }   
  26.   
  27. }   


 

Commons Lang

http://jakarta.apache.org/commons/lang/

说明:这个工具包可以看成是对java.lang的扩展。提供了诸如StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils等工具类。

 

Commons Logging

http://jakarta.apache.org/commons/logging/

说明:你知道Log4j吗?

 

Commons Math

http://jakarta.apache.org/commons/math/

说明:看名字你就应该知道这个包是用来干嘛的了吧。这个包提供的功能有些和Commons Lang重复了,但是这个包更专注于做数学工具,功能更强大。

 

Commons Net

http://jakarta.apache.org/commons/net/

说明:这个包还是很实用的,封装了很多网络协议。

1.      FTP

2.      NNTP

3.      SMTP

4.      POP3

5.      Telnet

6.      TFTP

7.      Finger

8.      Whois

9.      rexec/rcmd/rlogin

10.  Time (rdate) and Daytime

11.  Echo

12.  Discard

13.  NTP/SNTP

使用示例:

  1. TelnetClient telnet = new TelnetClient();   
  2.   
  3. telnet.connect( "192.168.1.99"23 );   
  4.   
  5. InputStream in = telnet.getInputStream();   
  6.   
  7. PrintStream out = new PrintStream( telnet.getOutputStream() );   
  8.   
  9. ...   
  10.   
  11. telnet.close();   
  12.   

 

Commons Validator

http://jakarta.apache.org/commons/validator/

说明:用来帮助进行验证的工具。比如验证Email字符串,日期字符串等是否合法。

使用示例:

  1. // Get the Date validator   
  2.   
  3. DateValidator validator = DateValidator.getInstance();   
  4.   
  5. // Validate/Convert the date   
  6.   
  7. Date fooDate = validator.validate(fooString, "dd/MM/yyyy");   
  8.   
  9. if (fooDate == null) {   
  10.   
  11.      // error...not a valid date   
  12.   
  13.      return;   
  14.   
  15. }   
  16.   

 

Commons Virtual File System

http://jakarta.apache.org/commons/vfs/

说明:提供对各种资源的访问接口。支持的资源类型包括

1.      CIFS

2.      FTP

3.      Local Files

4.      HTTP and HTTPS

5.      SFTP

6.      Temporary Files

7.      WebDAV

8.      Zip, Jar and Tar (uncompressed, tgz or tbz2)

9.      gzip and bzip2

10.  res

11.  ram

这个包的功能很强大,极大的简化了程序对资源的访问。

使用示例:

从jar中读取文件

  1. // Locate the Jar file   
  2.   
  3. FileSystemManager fsManager = VFS.getManager();   
  4.   
  5. FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );   
  6.   
  7.     
  8.   
  9. // List the children of the Jar file   
  10.   
  11. FileObject[] children = jarFile.getChildren();   
  12.   
  13. System.out.println( "Children of " + jarFile.getName().getURI() );   
  14.   
  15. for ( int i = 0; i < children.length; i++ )   
  16.   
  17. {   
  18.   
  19.     System.out.println( children[ i ].getName().getBaseName() );   
  20.   
  21. }   
  22.   
  23. 从smb读取文件   
  24.   
  25. StaticUserAuthenticator auth = new StaticUserAuthenticator("username""password"null);   
  26.   
  27. FileSystemOptions opts = new FileSystemOptions();   
  28.   
  29. DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);   
  30.   
  31. FileObject fo = VFS.getManager().resolveFile("smb://host/anyshare/dir", opts);   
  32.   

 

   

有人说Apache就像是丐帮,里面的项目多而杂。的确如此,Apache的项目水平参差不齐,而且不同的项目之间也常常会有功能重叠,甚至有撞车,比如Ant和Maven。不过Apache的优秀项目还是有很多的,比如Apache Http Server,Tomcat,Ant, Geronimo等等。Apache Commons是工具包,为其他项目提供支持,很多Commons中的项目就是从其他项目中抽取出来的。希望我的介绍能对你有所帮助,有些我提到的Commons中的项目我也没有用过,只是现学现卖,难免错误和疏漏,希望谅解。

转载于:http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=54982 



 

分享到:
评论
1 楼 cddcdd 2007-07-08  
朋友毕业一年了吧
我刚刚毕业

相关推荐

    Java开源的下一代社区平台Symphony.zip

    Apache Commons:Java 工具库集 Jodd:Java 工具库集 emoji-java:Java Emoji 处理库 User-Agent-Utils:Java User-Agent 解析库 Druid:Java 数据库连接池 FreeMarker:好用的 Java 模版引擎 Latke:Java ...

    协同过滤推荐算法(java原生JDK实现-附源码地址).pdf

    例如,使用HashMap存储用户-项目评分矩阵,用优先队列选择最近邻,使用Apache Commons Math库进行相似度计算等。同时,为了提高效率,可以使用缓存策略、并行计算或者分布式计算框架(如Hadoop或Spark)来加速相似度...

    java做的相册查看器

    开发者还可以使用额外的库,如Apache Commons Imaging或Java Advanced Imaging (JAI),来实现更复杂的图像操作,如缩放、旋转和滤镜效果。 3. **文件I/O操作**: Java的`java.io`包提供了对文件和目录的基本操作。在...

    SeriesShelf

    此外,对于文件操作和压缩,可能使用了Apache Commons IO或Java内置的java.util.zip类库。 在测试方面,JUnit可能是用来编写单元测试的工具,而Mockito可能用于模拟对象以隔离测试。对于持续集成和自动化构建,可能...

    智慧消防大数据解决方案PPT(19页).pptx

    智慧消防安全与应急管理是现代城市安全管理的重要组成部分,随着城市化进程的加速,传统消防安全管理面临着诸多挑战,如消防安全责任制度落实不到位、消防设施日常管理不足、消防警力不足等。这些问题不仅制约了消防安全管理水平的提升,也给城市的安全运行带来了潜在风险。然而,物联网和智慧城市技术的快速发展为解决这些问题提供了新的思路和方法。智慧消防作为物联网和智慧城市技术结合的创新产物,正在成为社会消防安全管理的新趋势。 智慧消防的核心在于通过技术创新实现消防安全管理的智能化和自动化。其主要应用包括物联网消防安全监管平台、城市消防远程监控系统、智慧消防平台等,这些系统利用先进的技术手段,如GPS、GSM、GIS等,实现了对消防设施的实时监控、智能巡检和精准定位。例如,单兵定位方案通过信标点定位和微惯导加蓝牙辅助定位技术,能够精确掌握消防人员的位置信息,从而提高救援效率和安全性。智慧消防不仅提升了消防设施的管理质量,还优化了社会消防安全管理资源的配置,降低了管理成本。此外,智慧消防的应用还弥补了传统消防安全管理中数据处理方式落后、值班制度执行不彻底等问题,赋予了建筑消防设施智能化、自动化的能力。 尽管智慧消防技术在社会消防安全管理工作中的应用已经展现出巨大的潜力和优势,但目前仍处于实践探索阶段。相关职能部门和研究企业需要加大研究开发力度,进一步完善系统的功能与实效性。智慧消防的发展既面临风险,也充满机遇。当前,社会消防安全管理工作中仍存在制度执行不彻底、消防设施日常维护不到位等问题,而智慧消防理念与技术的应用可以有效弥补这些弊端,提高消防安全管理的自动化与智能化水平。随着智慧城市理念的不断发展和实践,智慧消防将成为推动社会消防安全管理工作与城市化进程同步发展的关键力量。

    scratch少儿编程逻辑思维游戏源码-黄金时间.zip

    scratch少儿编程逻辑思维游戏源码-黄金时间.zip

    scratch少儿编程逻辑思维游戏源码-反冲枪.zip

    scratch少儿编程逻辑思维游戏源码-反冲枪.zip

    FlinkCDC3.2.1连接oracle11g的jar依赖

    将jar包解压放到flink的lib目录下

    飞机大战:精灵动力学与弹幕系统的数学交响

    在二维空战游戏的华丽表象之下,精灵动画与子弹系统构建起精密的数学宇宙。本文将深入解析飞机运动学、弹幕生成算法和渲染流水线优化策略,揭示经典空战游戏背后的连续介质力学与离散事件处理的完美融合。

    基于MPC轨迹跟踪技术的圆形道路运动学Carsim与Simulink联合仿真研究

    内容概要:本文详细介绍了利用模型预测控制(MPC)技术,在给定圆形道路条件下进行车辆轨迹跟踪的研究。主要内容涵盖MPC轨迹跟踪的基本原理、圆形道路的轨迹规划、MPC控制器的设计及其在carsim和simulink平台上的联合仿真。文中还展示了部分用于MPC控制器设计的Python代码片段,帮助读者更好地理解和实现相关技术。最后,文章总结了MPC在车辆控制系统中的重要性和未来的发展前景。 适合人群:从事车辆工程、自动化控制领域的研究人员和技术人员,特别是对MPC技术和车辆仿真感兴趣的读者。 使用场景及目标:适用于希望深入了解MPC轨迹跟踪技术及其在车辆控制系统中应用的专业人士。目标是通过理论与仿真的结合,提升对MPC控制器的理解和实际操作能力。 其他说明:文章不仅提供了详细的理论解释,还包括具体的代码实现和仿真步骤,有助于读者从理论到实践全面掌握MPC轨迹跟踪技术。

    水厂供水泵房自动化控制系统:PLC与触摸屏程序及组态软件的应用实例

    内容概要:本文详细介绍了某水厂供水泵房自动化控制系统的具体实施情况,涵盖PLC程序、触摸屏程序以及组态软件程序的设计与应用。PLC部分着重于I/O分配、压力值转换及其量程校验,确保系统稳定性和安全性;触摸屏程序则涉及隐藏菜单设置,用于调试阶段的功能访问限制;组态软件关注报警处理机制,优化后的报警触发逻辑提高了系统的响应速度。此外,还分享了一些现场调试的经验和技术细节,如通讯问题解决方法、硬件安装注意事项等。 适合人群:从事工业自动化领域的工程师、技术人员,尤其是对PLC编程、HMI界面设计和SCADA系统有研究兴趣的专业人士。 使用场景及目标:适用于新建或改造水厂及其他类似行业的自动化工程项目规划与实施过程中,旨在帮助相关人员更好地理解和掌握相关技术和最佳实践。 其他说明:文中提到的具体数值和配置仅供参考,在实际项目中需要根据具体情况调整。同时强调了工程实践中的一些常见误区和应对措施,为后续项目的顺利进行提供了宝贵的经验借鉴。

    scratch少儿编程逻辑思维游戏源码-节日贺卡.zip

    scratch少儿编程逻辑思维游戏源码-节日贺卡.zip

    少儿编程scratch项目源代码文件案例素材-铁弹.zip

    少儿编程scratch项目源代码文件案例素材-铁弹.zip

    基于springboot的“地方废物回收机构管理系统 ”的设计与实现(源码+数据库+文档+PPT).zip

    # 基于springboot的“地方废物回收机构管理系统 ”的设计与实现(源码+数据库+文档+PPT) - 开发语言:Java - 数据库:MySQL - 技术:springboot - 工具:IDEA/Ecilpse、Navicat、Maven 管理员功能: 管理员登陆后,主要模块包括首页、个人中心、员工管理、员工请假管理、销假申请管理、工作日志管理、员工工资管理、员工任务管理、任务汇报管理、设备信息管理、设备借用管理、设备归还管理、设备报修管理、维修入库管理、员工打卡管理、员工评价管理、回收价格管理、宿舍信息管理、宿舍入住管理、宿舍搬出管理、管理员管理、系统管理等功能。 员工功能: 员工登陆后,主要模块包括首页、个人中心、员工请假管理、销假申请管理、工作日志管理、员工工资管理、员工任务管理、任务汇报管理、设备信息管理、设备借用管理、设备归还管理、设备报修管理、维修入库管理、员工打卡管理、员工评价管理、回收价格管理、宿舍入住管理、宿舍搬出管理等功能。

    中国通信企业协会(李农):大模型之舞:客服行业高质量发展的新探索.pdf

    中国通信企业协会(李农):大模型之舞:客服行业高质量发展的新探索

    云开发Wetour旅游打卡广场微信小程序源码.zip

    云开发Wetour旅游打卡广场微信小程序源码,使用云开发技术,taro 构建 主要功能有:景点列表、景点详情、打卡记录、打卡成功、评论、景点地图、 景点导航、行程规划、行程线路等,注意搭建时候不兼容taro最新版本,请使用tarov1.3.18,后台为云开发管理后台。

    双有源桥DAB控制技术:功率均衡与动态特性提升的MATLAB/Simulink仿真及硬件实现

    内容概要:本文深入探讨了双有源桥(DAB)控制技术,涵盖单相搭建、单移相仿真、拓展移相、MPC(模型预测控制)、功率均衡及回流功率抑制等多个方面。文章不仅提供了详尽的理论分析,如数学模型、小信号建模和级联功率均衡,还展示了MATLAB/Simulink仿真结果和硬件实验平台的搭建细节。所有仿真数据、原理图、三维图均已完成,便于直接使用和进一步调整。此外,文中还包括了专利格式的技术文档,详细描述了单相回流功率抑制的创新点和技术特点。 适合人群:电力电子工程师、科研人员、高校教师及研究生,特别是从事双有源桥控制技术和功率转换研究的专业人士。 使用场景及目标:适用于需要深入了解双有源桥控制技术及其应用的研究人员,帮助他们掌握从理论到实践的完整流程,包括仿真验证和硬件实现。目标是提升系统的功率均衡能力和动态响应性能,解决回流功率问题。 其他说明:文章提供了丰富的参考资料,包括详细的仿真步骤、硬件选型指南、专利申请指导等,有助于读者快速上手并应用于实际项目中。

    scratch少儿编程逻辑思维游戏源码-尖刺.zip

    scratch少儿编程逻辑思维游戏源码-尖刺.zip

    汽车动力学建模与仿真:基于CarSim和Simulink联仿平台的空间位姿及速度时变研究

    内容概要:本文探讨了利用CarSim和Simulink进行车辆动力学模型的联合仿真,重点在于分析汽车在不同路况和驾驶条件下,空间位姿和速度随时间的变化情况。文章首先介绍了车辆动力学模型的概念及其重要性,随后详细讲解了CarSim和Simulink各自的功能特点以及它们联仿的优势。文中还展示了具体的Matlab代码片段,演示了如何设置仿真参数、导入模型、运行仿真并记录数据。最后,通过对仿真结果的分析,揭示了不同因素对汽车运动行为的影响,为汽车设计和性能优化提供了理论依据和技术手段。 适合人群:从事汽车工程、车辆动力学研究的专业人士,以及对汽车仿真感兴趣的科研人员和学生。 使用场景及目标:适用于希望深入了解车辆动力学特性的研究人员,旨在帮助他们掌握CarSim和Simulink联仿方法,提高汽车设计和性能分析的能力。 其他说明:文章不仅提供了详细的理论解释,还包括实际操作步骤和代码实例,便于读者快速上手实践。

    Requirements

    Requirements

Global site tag (gtag.js) - Google Analytics