- 浏览: 2473399 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
关于Jakarta 摘抄维基百科:
引用
Jakarta是Apache组织下的一套Java解决方案的开源软件的名称,它包括了很多子项目。Tomcat、Ant、Struts等等現在是Apache下的开源项目,也曾是Jakarta的关联项目。
Jakarta的名称是想把与Jakarta关系非常深的爪哇岛关联起来。编程语言Java的命名源自这个岛的名字(印尼語:Jawa、英語:Java),而城市雅加达(Jakarta)正是这个岛上的第一大城市,也是印度尼西亚的首府。
Jakarta的名称是想把与Jakarta关系非常深的爪哇岛关联起来。编程语言Java的命名源自这个岛的名字(印尼語:Jawa、英語:Java),而城市雅加达(Jakarta)正是这个岛上的第一大城市,也是印度尼西亚的首府。
Jakarta工具包可谓java开发中的必备神器, 熟悉里面各种工具类的用法, 可以让我们少重复发明一些轮子.它里面的一些commons包也成了很多开源项目的必备依赖. 比如spring, hibernate之流.
这本书讲到了Jakarta中几个比较重要的包的用法, 由于Jakarta中很多工具类的JavaDoc写的非常棒, 因此, 里面大部分工具类我们通过阅读其JavaDoc都应用的得心应手. 而这本书给我的最大体会, 就是发现了Jakarta中更多的宝贝, 而且熟悉了更多的用法. 缺点就是此书有点老了, 而Jakarta发展的太快, 书里面的很多内容在实际的工具包中都对不上号了
Commons Lang
ToStringBuilder, HashCodeBuilder, EqualsBuilder, CompareToBuilder这些东西做过java的几乎人人都知道了吧
介绍几个很少用的:
ArrayUtils.toString()
将数组用大括号括起来, 用逗号分隔输出.如果碰到null元素, 将输出unkown字符串. 如果是collection要输出, 可以先toArray()
ArrayUtils.contains()
检查数组中是否包含指定的元素, indexOf(), lastIndexOf()可以指定元素所在数组的下标
ArrayUtils.toMap()
将一个二维数组转换成一个map对象.
FastDateFormat
可以线程安全的实现对日期进行格式化.
DateUtils.round()
可以将日期时间舍入到最近的日期, 比如DateUtils.round(new Date(), Calendar.Month);将对当前日期中月后面的内容舍弃.DateUtils.SEMI_MONTH, 将日期舍入到一个月的中间和开头.
DateUtils.truncate()
则类似Math.floor()对指定域(如Calendar.MONTH)之后的内容进行截取处理.
Validate
用来对方法参数进行验证, 当遇到无效的参数时, 将抛出IllegalArgumentException异常
StopWatch
用来度量某段代码的执行耗时, 和现实中的秒表有一样的功能, 你可以启动, 停止, 展厅, 恢复计时, 重置以及拆分它. 其中split()/unsplit()方法类似于秒表中的分圈计时.
文本处理
StringUtils.abbreviate()
用于将指定的字符串进行缩减处理, 而且还可以从指定的位置开始缩减.
比如StringUtils.abbreviate("this is a test", 10) 得到的是"this is..."字符串
StringUtils.substringBetween()
返回被两个指定参数包围起来的字符串内容. 比如将<html>标签包围的内容返回, StringUtils.substringBetween(htmlString, "<html>", "</html>");
StirngUitls.strip()
可以将字符串中首尾含有指定的内容清除之
比如
StirngUtils.strip("-------****------ABCDE!-------*******-----------", "-*")得到的是"ABCDE!"
StringUtils.chomp()
取出字符串末尾的回车换行符, 当然可以指定删除最后的那个字符
String stars = StringUtils.repeat("*", 40); String center = StringUtils.center("TEST", 40, "*"); String heading = StringUtils.join(new Object(){stars, center, stars}, "\n");
得到如下字符串
引用
*****************************
************TEST************
*****************************
************TEST************
*****************************
StringUtils.countMatches()
返回一段文本在另一段字符串中出现的次数.
StringUtils.deference()
输出两个字符串之间的差别, indexOfDeference()指出两个字符串之间开始出现差别的位置, getLevenshteinDistance(), 指出从一个字符串转换到另一个字符串需要执行的插入, 删除和替换的次数.
JavaBean
PropertyUtils.getSimpleProperty()
通过属性名返回bean属性值
getNestedProperty()
返回嵌套属性值, 比如getNestedProperty(book, "name.firstName");
getIndexedProperty()
从数组或List型Bean属性中返回指定的下标元素, 比如getIndexedProperty(book, "chapters[1]");
getMappedProperty()
从指定map类型的bean属性中返回值, 比如getMappedProperty(apartment, "rooms(dining)");
getProperty()
可以返回任何属性, 比如 getProperty(country, "regions[0].cities(richmond).population");
BeanComparator
用来根据bean属性来排列和比较bean
比如:
Collections.sort(countryList, new BeanComparator("bean"))// 根据国家名称对国家列表进行排序
PropertyUtils.describe()
可创建一个包含bean实例中所有可读属性的map对象
BeanMap
可以将一个bean封装成一个通过Map接口来对bean属性进行访问.
DynaBean
用来在运行时动态创建一个bean.
DynaProperty[] props = new DynaProperty[] { new DynaProperty("name", String.class), }; BasicDynaClass clazz = new BasicDynaClass("book", BasicDynaClass.class, props); DynaBean bean = clazz.newInstance(); bean.set("name", "macro");
BeanUtils
以字符串的形式读取和设置bean属性.
函数对象
用来提供更高级的代码重用性和更简洁的设计, 它用来将功能逻辑从面向特性数据结构的算法中抽象并提取出来.
我们最常用的就是Comparator和Iterator.
ReverseComparator
用来将Comparator的功能反转, 比如顺序改成倒序
ComparatorChain
会把连接中的每一个Comparator进行比较, 如果当前Comparator返回值为0, 则调用下一个, 直到连接中没有其他的Comparator.
NullComparator
对null元素进行排序, 还可以控制null出现在排序的开始还是结尾, 一般NullComparator用来对其他的Comparator进行装饰.
当数组和Collection含有预定顺序关系时, 可使用FixedOrderComparator进行排序, 这种顺序关系包括一周里面星期几的顺序, 太阳系中行星的顺序, 光谱中的颜色顺序.
String[] medalOrder = new String[] {"tin", "bronze", "siliver", "gold"}; Comparator medalComparator = new FixedOrderComparator(medalOrder); Comparator beanComparator = new BeanComparator("medal", medalComparator); beanComparator.compare(medal1, medal2);
Predicates
使用Predicate用来评估某个判别式或者条件, Predicate是一种可判别其他对象并返回true或false的对象. 整个Commons Collection都用它来进行筛选, 选择以及验证工作.可以将其理解为对if条件的一种封装, 该接口的唯一方法evaluate()返回true和false.
UniquePredicate
当对象首次被evaluate时返回true, 该predicate内部维护了一个evaluate对象的HashSet对象, 如果对象已经存在其中, 将返回false. 用来从collection中不重复的获取对象.
Predicate可以用于任何场合, 比如验证用户输入, 筛选collection内容或者用于替换负责的逻辑条件
Transformer
用来将一个对象为参数, 返回一个经过转换处理后的新的对象
ChainedTransformer
用来将多个Transformer连接起来.
SwitchTransformer
实施一个依赖于某Predicate的Transformer. 他能对一个switch进行建模, 并接受三个参数, 一个Predicate数组, 一个Transformer数组, 一个默认的Transformer.两个数组是一一对应的关系, 如果Predicate都不满足则执行默认的Transformer.
Closure
用来将对某个对象的一段代码进行封装. 比如对某件商品进行打折处理, 可以将打折处理过程封装成一个Closure.
ChainedClosure
用来将多个Closure进行链接, 与Transformer不同在于, 每个Transformer处理完之后的结果传给下一个Transformer, 而Closure链传递的是同一个对象. 好像轿车通过工厂的流水线一样.
IfClosure
提供一个Predicate和两个Closure, 如果Predicate判定为true, 执行第一个Closure, 否则执行第二个.
WhileClosure
用来模拟循环处理, 它需要传递一个Predicate和一个Closure, 如果条件为true, 那么不断执行Closure, 知道条件为false为止.
ForClosure用来执行指定次数的Closure.
Collection
LoopIterator
用来重复的便利Collection, 该遍历将永不停止, 因为其HasNext()返回值永远是true, 当用while进行遍历的时候,不要忘记添加退出条件.
对于需要不停的判断一系列取值或者反复执行一组命令时, 使用LoopingIterator就非常合适. 同时它还实现了ResettableIterator接口, 在执行的过程中, 通过执行reset()方法可以跳回到Collection的起始位置.
从只有三项的List中循环取出5项
LoopingIterator itor = new LoopingIterator(list); for(int i = 0; i < 5; i++) { String element = (String)itor.next(); }
ArrayListIterator
用来遍历ArrayList中指定的部分内容.通过nextIndex()可以获取某个元素的下标.
FilterIterator
包含了一个Predicate, 如果Predicate为true则该元素将包含在迭代器中. 从来达到遍历某个Collection中合乎特定条件的元素, 或者删除不符合条件的元素.它实际上对指定Iterator的一个装饰而已.
Collections.filter()
方法用来将不符合条件的元素从Collection中移除, 因此具有破坏性.如果不想破坏原有的Collection, 可以使用CollectionUtils.select()和
CollectionsUtils.selectRejected()
创建一个含有所有符合或者不符合条件元素的新的Collection.
UniqueFilterIterator
可以在遍历Collection时跳过重复元素.
Bag
容器用来对同一个对象存储多次, 并跟踪对象有多少份拷贝.比如某个Bag包含20份A对象的拷贝, 50份B对象的拷贝. Bag有两种, 使用HashMap的HashBag, 具有更高的性能, 还有一种是TreeBag, 它需要维护对象元素加入的顺序.将以加入的顺序返回它们.
Buffer
分为两种:UnboundedFifoBuffer 无大小限制, BoundFifoBuffer 有大小限制.该容器类似JDK中的Queue, queue中的offer和peek功能与add和remove方法具有相同的功能, 唯一的区别是想Queue中添加数据遇到问题时会抛异常.
还有一种具有优先级的Buffer:PriorityBuffer, 对象会根据Comparator生成的优先级来决定是否被移除. 移除对象的逻辑类似于医院的急诊室工作流程.病情严重的病人将得到优先治疗的权利.这个与PriorityQueue.
BlockingBuffer为阻塞式Buffer.如果系统需要在某段数据就绪时进行处理的话, 就应该使用这种Buffer. 或者系统中有多个进行同时侦听流水线主键缓冲区时, 该数据结构也很管用.JDK5中也有与之对应的BlockingQueue.
MultiMap
用于给指定的键维护一组值. 当需要一个对象关联多个对象的时候, 使用MultiMap是个好主意.
BidMap
是这样一种Map实现:当键值都唯一的时候, 可以根据值来查对应的键
DualHashBidMap 把键和值存在两个HashMap中, 其中一个存key-value, 一个存value-key
CaseInsensitiveMap
key为大小写不敏感String类型的map
PredicateMap
增加了验证功能的map, 在put一个entry的时候, 如果验证显示为false的话, 将抛出IllegalArgumentException异常.
CollectionUtils.transform()
该方法接收两个参数, 用来通过Transformer, 将制定的Collection进行转换, 得到一个新的经过转换后的Collection
LRUMap
一种固定尺寸的Map, 当达到最大容量时会借助最近最少使用算法社区相应的项.
LazyMap
当根据某个键检索某个值的时候, 将通过指定Transformer, 创建该值.
Transformer t = new Transformer() { public Object transform(Object arg0) { return StringUtils.reverse((String) arg0); } }; Map names = new HashMap(); Map lazyMap = LazyMap.decorate(names, t); Object value = lazyMap.get("MacroChen"); System.out.println(value);
LazyMap的另一个应用场景是通过给定的值从数据库中检索相应的记录.用LazyMap将LRUMap进行包装是一个不错的注意.
CollectionUtils.countMatches(), cardinality()
用来统计某个对象出现的次数, countMatches()根据Predicate从指定的Collection中返回满足条件的元素数目. 而后者从collection中返回指定对象的数目.
CollectionUtils.union(), intersection(), disjunction(), subtract()
分别对两个集合进行并集, 交集, 联集和差集.
PropertiesConfiguration
对Properties的适度增强, 能直接将对应的value转换成相应的类型, 比如以逗号分割的字符串转换成List, 数字字面值转换成数字值.而不是字符串.
Commons Logging
能在运行时, 通过检测, 能调用相应的日志框架. 比如jdk自带的日志框架和Log4J等.
比如默认情况下, 下面的代码:
public class LoggingTest { static Log log = LogFactory.getLog("mylog.LogginTest"); public static void main(String[] args) { log.info(log); } }
将返回
引用
信息: org.apache.commons.logging.impl.Jdk14Logger@83cc67
当LogFactory.getInstance()被调用的时候, CommonLogging将通过检测一些系统属性和类路径中库的情况来定位和管理合适的日志框架.
所以如果将log4j加入到类路径之后输出将变成这样:
引用
log4j:WARN Please initialize the log4j system properly.
如果配置了log4j.properties, 那么输出结果可能变成:
引用
DEBUG (LoggingTest.java:14) org.apache.commons.logging.impl.Log4JLogger@758fc9
要显示的将logging设置为使用log4j来做日志输出, 可以通过下面的设置满足要求
System.setProperty("org.apache.commons.logging.Log", "org.apache.commcons.logging.impl.Log4JLogger");
Commons IO
CopyUtils
用来将某个InputStream, Reader, byte[]的内容copy到OutputStream或者Writer.
IOUtils.toString()
用来将信息从Reader或者InputStream中copy到字符串中.
IOUtils.closeQuietly()
用来只有的关闭某个InputStream, OutputStream, Reader或Writer, 而不用担心null或者IOException, 这个一般放在finally中执行.
FileUtils.byteCountToDisplaySize()
以KB, MB, GB的形式显示某个文件大小, 该工具类有三个静态变量, ONE_KB, ONE_GB, ONE_MB, 不用大家应该也知道了.另外他不会对文件大小进行四舍五入操作, 比如一个2.9MB的文件, 得到是2MB, 也就是说余数被统统舍弃了.
FileUtils.copyFile(), copyFileToDirectory(), writeStringToFile()
分别是拷贝文件, 拷贝文件到指定的文件夹, 拷贝字符串内容到文件.
FileUtils.deleteDirectory(), cleanDirectory(), sizeOfDirectory()
递归删除目录和清空目录下的所有文件, 获取指定目录下所有内容的总大小.
FileUtils.touch()
类似unix下的touch命令, 如果文件不存在将创建一个新的文件.如果文件存在, 则更新文件的时间戳为当前时间.
IOFileFilter
关于文件的过滤, 包括FileFilter, FilenameFilter, PrefixFileFilter, SuffixFileFilter, DirectoryFileFilter, 以及AndFileFilter等逻辑过滤器.
CountingInputStream和CountingOutputStream
用来跟踪进入某个Stream的byte数量.它可以视为是各种Stream的一种装饰器类
TeeOutputStream
用来将相同的数据发送到两个OutputStream.
评论
2 楼
cectsky
2011-04-08
commons
请问,现在有得卖吗??
nisen 写道
,我是这本书的审校,commons还有更多的好玩的东东,而且现在不叫jakarta commons 了而是commons了,并且成了apache的顶层项目。
BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
请问,现在有得卖吗??
1 楼
nisen
2009-12-08
,我是这本书的审校,commons还有更多的好玩的东东,而且现在不叫jakarta commons 了而是commons了,并且成了apache的顶层项目。
BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
发表评论
-
<异类>读书笔记
2013-03-06 07:54 0成功者能够获得更多的机会,从而能变得更为成功。税收愈减免,富人 ... -
《python学习手册》学习笔记
2013-03-11 22:25 3474python格式化传参数非常赞,用数字标明位置,值得java学 ... -
<万历十五年>读书笔记
2013-03-11 22:27 1619在网上下了一个电子书, 但是貌似跟万历十五年没啥关系, 都是讨 ... -
《鸟哥的linux私房菜》读书笔记(部分)
2013-03-11 22:27 2068x86是一种微机系统硬件架构,另一种是苹果的mac的架构 l ... -
《你的灯亮了吗》读书笔记
2013-03-06 07:20 1522这是一本原本写给程序员的书 本书的四个问题: 搞清问题的来源 ... -
《小狗钱钱》读书笔记
2013-03-06 07:17 1482一本非常不错的理财学习入门书, 以童话的形式, 儿童的思维方式 ... -
《我的奋斗》读书笔记
2012-04-14 22:03 2077文字写的很幽默, 故事也基本都是一些平常人的故事,看到了一个特 ... -
《Java Performance》书评
2012-01-15 18:32 2967原文: http://java.dzone.com/rev ... -
《程序员应该知道的97件事》读书笔记
2012-01-15 18:36 2389一本关于写代码的文 ... -
《影响力》读书笔记
2011-11-05 14:47 1836从书名上很可能以为 ... -
《浪潮之巅》读书笔记
2011-11-05 14:44 1375作为一个中国人通过分析硅谷高科技公司的一系列传奇, 总结出这 ... -
《黑客与画家》读书笔记
2011-11-05 13:37 1822以前看过《rework》, 觉得是每一个小型创业公司的创业宝 ... -
《乔布斯传》读书笔记
2011-10-18 08:53 2854在ipad上看完了这本书, 写的还不错, 里面没有无聊的八 ... -
《细说Java》读书笔记
2011-10-05 15:01 1998国人写的, 感觉是一 ... -
《敏捷估计与规划》读书笔记
2011-10-05 12:08 3181这本书断断续续看了很长时间, 内容非常不错, 基本涵盖了sc ... -
《怪诞心理学》读书笔记
2011-10-05 09:44 1827既然是怪诞, 那么整本书涉及的内容并不是我们平常司空见怪的一 ... -
《番茄工作法图解》读书笔记
2011-09-28 09:02 2393番茄工作法是时间管 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2102"工欲善其事必先利其器", 在平时的开发 ... -
《敏捷迭代开发管理者指南》读书笔记
2011-09-24 13:09 2220这是一本关于迭代开发 ... -
《解析极限编程》读书笔记
2011-09-24 13:03 1791不知道是kent beck的语 ...
相关推荐
### Jakarta Commons CookBook 学习笔记 #### 一、Commons Lang: EqualsBuilder and HashCodeBuilder **1.1 概述** `EqualsBuilder` 和 `HashCodeBuilder` 是 Apache Commons Lang 包中提供的两个工具类,用于...
学习并熟练掌握《Jakarta Commons Cookbook》中的知识点,开发者不仅可以提升个人技能,还能在实际项目中提高代码质量和开发效率,使Java应用更加健壮和高效。这本书的电子版为开发者提供了随时随地学习的便利,是一...
在阅读《Jakarta Commons Cookbook》时,你可以学习如何有效地利用这些组件来提升你的Java项目。例如,了解如何使用` FileUtils.copyFile()`方法复制文件,或通过` StringUtils.join()`将数组元素连接成字符串。此外...
《Jakarta Commons Cookbook》是Java开发者的一份宝贵资源,它包含了一系列实用的工具类和组件,可以帮助开发者在日常编程工作中提高效率。Jakarta Commons是Apache软件基金会的一个项目,旨在为Java社区提供一系列...
博文链接:https://dcriori.iteye.com/blog/127788
学习《Jakarta Commons Cookbook》,开发者将能够深入理解如何在实际项目中运用这些工具类,提升代码的可维护性和效率。此外,对于源码的探索也有助于理解Java编程的底层机制,提升编程能力。通过阅读目录,你可以...
《Jakarta.Commons.Cookbook》是一本专注于Apache Jakarta Commons组件使用的指南,它为开发者提供了大量实用的代码示例和技巧,帮助他们在Java应用程序开发中更有效地利用这些库。Apache Jakarta Commons是Apache...
Jakarta Commons是Apache软件基金会...通过学习和使用Jakarta Commons Lang,开发者可以显著提高代码的效率和可读性,避免重复编写常见的基础工具代码。同时,源码和API文档能够帮助我们更好地理解和利用这个强大的库。
### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...
jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...
jakarta commons-logging 1.1.1
【Jakarta Commons笔记】 Jakarta Commons是Apache软件基金会的一个项目集合,它提供了许多Java开发中常用的工具类和组件。这个项目旨在减少重复的工作,通过共享和重用代码,提高开发效率。Jakarta Commons包含了...
学习Jakarta Commons具有双重意义:一是从应用层面来看,它可以极大地提升开发效率和代码质量;二是从源码层面来看,Jakarta Commons的源码本身就是一笔宝贵的财富,能够帮助开发者深入了解Java编程的最佳实践和技术...
本书是一本介绍apache commons使用的电子书
**Jakarta Commons 使用详解** Jakarta Commons 是一个 Apache 软件基金会的项目,它包含了一系列独立、可重用的 Java 类库,旨在提供常见编程任务的解决方案。这些类库覆盖了从输入输出处理到字符串操作,再到网络...
**Jakarta Commons API** 是一个Java开发人员广泛使用的开源库集合,它包含了多个模块,每个模块专注于特定的编程任务,从而简化了Java应用程序的开发。Jakarta Commons是Apache软件基金会的一个项目,它提供了大量...