- 浏览: 567826 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (267)
- 随笔 (4)
- Spring (13)
- Java (61)
- HTTP (3)
- Windows (1)
- CI(Continuous Integration) (3)
- Dozer (1)
- Apache (11)
- DB (7)
- Architecture (41)
- Design Patterns (11)
- Test (5)
- Agile (1)
- ORM (3)
- PMP (2)
- ESB (2)
- Maven (5)
- IDE (1)
- Camel (1)
- Webservice (3)
- MySQL (6)
- CentOS (14)
- Linux (19)
- BI (3)
- RPC (2)
- Cluster (9)
- NoSQL (7)
- Oracle (25)
- Loadbalance (7)
- Web (5)
- tomcat (1)
- freemarker (1)
- 制造 (0)
最新评论
-
panamera:
如果设置了连接需要密码,Dynamic Broker-Clus ...
ActiveMQ 集群配置 -
panamera:
请问你的最后一种模式Broker-C节点是不是应该也要修改持久 ...
ActiveMQ 集群配置 -
maosheng:
longshao_feng 写道楼主使用 文件共享 模式的ma ...
ActiveMQ 集群配置 -
longshao_feng:
楼主使用 文件共享 模式的master-slave,produ ...
ActiveMQ 集群配置 -
tanglanwen:
感触很深,必定谨记!
少走弯路的十条忠告
一、JXPath简介
JXPath是apache公司提供的XPath的java实现,属于jakarta的一部分,最新的版本是1.1,JXPath的主要功能在于一组java类库来使用XPath的方式访问符合JavaBeans规范的java类、java集合(Collections)、其他具有动态属性的对象(如Map、ServletContext等),同时提供了一套扩展机制使我们可以增加对这些对象之外的其他对象模型的支持。
二、使用JXPath访问JavaBean的属性
1、准备一个符合要求的Java类
import java.util.Comparator;
import org.apache.log4j.Logger;
public class Company implements Comparator
{
public static Logger logger = Logger.getLogger(Company.class);
private String name = "";
private int id = 0;
private String address = "";
public void setName(String p_name){
this.name = p_name;
}
public void setId(int p_id){
this.id = p_id;
}
public void setAddress(String p_address){
this.address = p_address;
}
public String getName(){
return this.name;
}
public int getId(){
return this.id;
}
public String getAddress(){
return this.address;
}
public int compare(Object o1, Object o2){
return 0;
}
public boolean equals(Object obj) {
boolean result = false;
if (obj instanceof Company){
Company company = (Company) obj;
if (company.getId()==this.id
&& company.getName().equals(this.getName())
&& company.getAddress().equals(this.getAddress()))
result = true;
}
return result;
}
}
2、使用JXPath来访问该java类的属性
//实例化一个Company对象
Company company = new Company();
//设置该对象的各个属性
company.setId(1);
company.setName("vivianj组织");
company.setAddress("www.vivianj.org");
//初始化JXPath的上下文环境
JXPathContext context = JXPathContext.newContext(company);
//使用XPath语法来访问该对象的属性
//getValue方法的参数"name"、"id"、"address"使用了XPath的语法,
//他们分别代表要访问company对象的属性name、id、address
String name = (String)context.getValue("name");
Integer id = (Integer) context.getValue("id");
String address = (String)context.getValue("address");
3. Lenient 访问模式
在上面的访问方式中有可能会出现这样的情况:如果你要访问的属性不是这个Java类的属性,那么执行过程中系统会报出一个违例-- org.apache.commons.jxpath.JXPathException: No value for xpath: xxx(xxx是你要访问的属性的名称)。
这种情况对于程序的稳定性、健壮性是有害的,这时候我们应该使用JXPath提供的Lenient 访问模式来避免出现这样的情况,在Lenient 访问模式下,如果你访问了不存在的属性,系统会返回一个null,而不是抛出一个违例。
要使用Lenient 访问模式非常简单,只需要在代码中增加context.setLenient(true)调用就可以了,具体操作如下:
//实例化一个Company对象
Company company = new Company();
//设置该对象的各个属性
company.setId(1);
company.setName("vivianj组织");
company.setAddress("www.vivianj.org");
//初始化JXPath的上下文环境
JXPathContext context = JXPathContext.newContext(company);
//通知系统使用Lenient 访问模式
context.setLenient(true)
//使用XPath语法来访问该对象的属性
String name = (String)context.getValue("name1");
[注] name1 不是Company类的属性,但是由于使用了Lenient 访问模式,所以系统返回null。
4. 访问嵌套属性
2中的例子演示了如何访问类的简单类型属性,如果类的属性本身就是一个类类型,情况会怎么样呢,下面的例子将演示这种访问方式:
1)、准备Association类
Association类有一个属性company,他本身是Company类类型
import java.util.ArrayList;
import java.util.Collection;
public class Association {
private Company company;
public Company getCompany(){
return this.company;
}
public void setCompany(Company p_company){
this.company = p_company;
}
}
2)、用JXPath访问嵌套属性
//实例化Association类
Association association = new Association();
//实例化Company类
Company company = new Company();
company.setId(1);
company.setName("vivianj组织");
company.setAddress("www.vivianj.org");
//设置Association对象的company属性
association.setCompany(company);
//初始化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//使用Lenient访问模式访问嵌套属性
context.setLenient(true);
//通过JXPath方法获得指定属性的值
//其中getValue方法的参数"company/name"的
//第一部分company代表Association的属性company,
//第二部分("/"符号后面的部分)name代表是company对象的属性
String name = (String) context.getValue("company/name");
5.访问Java集合
JXPath可以访问Java集合的内容,这些集合包括java数组、Collection类及其子类,他们的访问方式基本类似,详细的情况请参照下面的程序代码:
1)、扩展Association类,增加一个提供Company对象的数组的方法
给Association类增加一个方法getCompanysInArray方法,方法的签名和内容如下:
public Company[] getCompanysInArray(){
for (int i = 0 ; i < 5 ; i++){
//实例化新的Company对象
Company comp = new Company();
comp.setId(i);
comp.setName("Name" + i );
comp.setAddress("address" + i);
//将实例化的对象赋值给到数组的对应元素
companysInArray[i] = comp;
}
return companysInArray;
}
2)、扩展Association类,增加一个提供Company对象的Collection的方法
给Association类增加一个方法getCompanysInCollection方法,方法的签名和内容如下:
public Collection getCompanysInCollection(){
for (int i = 0 ; i < 5 ; i++){
//实例化新的Company对象
Company comp = new Company();
comp.setId(i);
comp.setName("Name" + i );
comp.setAddress("address" + i);
//将实例化的对象增加到Collection中
companysInCollection.add(comp);
}
return companysInCollection;
}
3)、访问方法
通过JXPath访问数组的详细代码如下:
//实例化Association类
Association association = new Association();
//初始化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//使用Lenient访问模式访问嵌套属性
context.setLenient(true);
//通过JXPath语法访问数组下标为4的记录的name属性
//getValue方法的参数"companysInArray[5]/name"中的
//部分companysInArray是Association的属性,
//5代表访问数组中第5个元素,name表示第五个元素的属性名
String name = (String) context.getValue("companysInArray[5]/name");
//通过XPath语法访问集合中第4条记录的name属性
//getValue方法的参数" companysInColletion[5]/name"中的
//部分companysInColletion是Association的属性名,
//5代表访问集合中第5个元素,name表示第五个元素的属性名
String name = (String) context.getValue("companysInColletion[5]/name");
[注] XPath访问数组或者集合时,数组或者集合的下标是从1开始,这点和java语言中规定的从0开始有点不同
4)、获取多条记录
既然是访问集合数据,那么经常会出现这样的需求:需要获得符合条件的多条记录。这种情况使用JXPath也非常方便,使用context对象的iterator方法加上相应的XPath信息就可以了,操作后返回的内容保存在Iterator对象中,非常方便就可以访问。具体的代码如下:
A、按记录所在的位置获取
//实例化Association类
Association association = new Association();
//实例化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//获得数组中下标大于3的所有记录
//iterator方法的参数companysInArray [position() > 3]使用了XPath的语法
//其中的companysInArray是Association对象的属性,他是一个数组
// position()是XPath中的内置函数,获得记录在数组中的下标
Itarator companysInArray =
context.iterate("companysInArray [position() > 3]");
//获得集合中所处位置大于3的所有记录
//iterator方法的参数companysInCollection [position() > 3]使用了XPath的语法
//其中的companysInCollection是Association对象的属性
//他是一个Collection类型或者是其子类型的一个实例
//position()是XPath中的内置函数,获得记录在集合中的位置
Itarator companysInCollection =
context.iterate("companysInCollection [position() > 3]");
B、按指定的规则获取
//实例化Association类
Association association = new Association();
//实例化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//获得数组中对象的name属性为'name3'的所有对象
//iterator方法的参数companysInArray [name='name3']使用了XPath的语法
//其中的companysInArray是Association对象的属性,他是一个数组
//name='name3'是条件表达式,表示返回对象的name属性值必须是name3
Itarator companysInArray =
context.iterate("companysInArray [name='name3']");
//获得集合中对象的name属性为'name2'的所有对象
//iterator方法的参数companysInCollection [name='name3']使用了XPath的语法
//其中的companysInCollection是Association对象的属性
//他是一个Collection类型或者是其子类型的一个实例
//name='name3'是条件表达式,表示返回对象的name属性值必须是name3
Itarator companysInCollection =
context.iterate("companysInCollection [name='name3']");
6. 访问Map对象的内容
1)、准备符合条件的java类
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jxpath.JXPathContext;
public class MyMapSource {
private Map map = new HashMap();
public MyMapSource(){
map.put("id",new Integer(5));
map.put("name","name");
}
public Map getMapSource(){
return this.map;
}
}
2)、使用JXPath访问Map的内容
//实例化MyMapSource对象
MyMapSource myMapSource = new MyMapSource();
//实例化JXPath上下文
JXPathContext context = JXPathContext.newContext(myMapSource);
//通过JXPath访问Map对象的内容
// getValue方法的参数使用了XPath语法
// mapSource/id中的mapSource表示MyMapSource对象的属性,
//他是一个Map类型的对象,id表示获取该Map对象的id字段
Integer id = (Integer) context.getValue("mapSource/id");
7. 访问XML文件
1)、编写自己的XML文件
<?xml version="1.0" ?>
<companys>
<company id="101">
<name>sun</name>
<address>
<street>18 #,WenShan Road</street>
</address>
</company>
<company id="102">
<name>ibm</name>
<address>
<street>18 #,WenEr Road</street>
</address>
</company>
</companys>
2)、编写一个类,返回符合条件的company内容
import java.net.URL;
import org.apache.commons.jxpath.Container;
import org.apache.commons.jxpath.xml.DocumentContainer;
public class Companys {
private Container companys = null;
public Container getCompanys(){
if (companys == null){
//获取XML文件的内容
URL url = getClass().getResource("companys.xml");
//将XML的内容绑定到companys对象
companys = new DocumentContainer(url);
}
return companys;
}
}
JXPath是apache公司提供的XPath的java实现,属于jakarta的一部分,最新的版本是1.1,JXPath的主要功能在于一组java类库来使用XPath的方式访问符合JavaBeans规范的java类、java集合(Collections)、其他具有动态属性的对象(如Map、ServletContext等),同时提供了一套扩展机制使我们可以增加对这些对象之外的其他对象模型的支持。
二、使用JXPath访问JavaBean的属性
1、准备一个符合要求的Java类
import java.util.Comparator;
import org.apache.log4j.Logger;
public class Company implements Comparator
{
public static Logger logger = Logger.getLogger(Company.class);
private String name = "";
private int id = 0;
private String address = "";
public void setName(String p_name){
this.name = p_name;
}
public void setId(int p_id){
this.id = p_id;
}
public void setAddress(String p_address){
this.address = p_address;
}
public String getName(){
return this.name;
}
public int getId(){
return this.id;
}
public String getAddress(){
return this.address;
}
public int compare(Object o1, Object o2){
return 0;
}
public boolean equals(Object obj) {
boolean result = false;
if (obj instanceof Company){
Company company = (Company) obj;
if (company.getId()==this.id
&& company.getName().equals(this.getName())
&& company.getAddress().equals(this.getAddress()))
result = true;
}
return result;
}
}
2、使用JXPath来访问该java类的属性
//实例化一个Company对象
Company company = new Company();
//设置该对象的各个属性
company.setId(1);
company.setName("vivianj组织");
company.setAddress("www.vivianj.org");
//初始化JXPath的上下文环境
JXPathContext context = JXPathContext.newContext(company);
//使用XPath语法来访问该对象的属性
//getValue方法的参数"name"、"id"、"address"使用了XPath的语法,
//他们分别代表要访问company对象的属性name、id、address
String name = (String)context.getValue("name");
Integer id = (Integer) context.getValue("id");
String address = (String)context.getValue("address");
3. Lenient 访问模式
在上面的访问方式中有可能会出现这样的情况:如果你要访问的属性不是这个Java类的属性,那么执行过程中系统会报出一个违例-- org.apache.commons.jxpath.JXPathException: No value for xpath: xxx(xxx是你要访问的属性的名称)。
这种情况对于程序的稳定性、健壮性是有害的,这时候我们应该使用JXPath提供的Lenient 访问模式来避免出现这样的情况,在Lenient 访问模式下,如果你访问了不存在的属性,系统会返回一个null,而不是抛出一个违例。
要使用Lenient 访问模式非常简单,只需要在代码中增加context.setLenient(true)调用就可以了,具体操作如下:
//实例化一个Company对象
Company company = new Company();
//设置该对象的各个属性
company.setId(1);
company.setName("vivianj组织");
company.setAddress("www.vivianj.org");
//初始化JXPath的上下文环境
JXPathContext context = JXPathContext.newContext(company);
//通知系统使用Lenient 访问模式
context.setLenient(true)
//使用XPath语法来访问该对象的属性
String name = (String)context.getValue("name1");
[注] name1 不是Company类的属性,但是由于使用了Lenient 访问模式,所以系统返回null。
4. 访问嵌套属性
2中的例子演示了如何访问类的简单类型属性,如果类的属性本身就是一个类类型,情况会怎么样呢,下面的例子将演示这种访问方式:
1)、准备Association类
Association类有一个属性company,他本身是Company类类型
import java.util.ArrayList;
import java.util.Collection;
public class Association {
private Company company;
public Company getCompany(){
return this.company;
}
public void setCompany(Company p_company){
this.company = p_company;
}
}
2)、用JXPath访问嵌套属性
//实例化Association类
Association association = new Association();
//实例化Company类
Company company = new Company();
company.setId(1);
company.setName("vivianj组织");
company.setAddress("www.vivianj.org");
//设置Association对象的company属性
association.setCompany(company);
//初始化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//使用Lenient访问模式访问嵌套属性
context.setLenient(true);
//通过JXPath方法获得指定属性的值
//其中getValue方法的参数"company/name"的
//第一部分company代表Association的属性company,
//第二部分("/"符号后面的部分)name代表是company对象的属性
String name = (String) context.getValue("company/name");
5.访问Java集合
JXPath可以访问Java集合的内容,这些集合包括java数组、Collection类及其子类,他们的访问方式基本类似,详细的情况请参照下面的程序代码:
1)、扩展Association类,增加一个提供Company对象的数组的方法
给Association类增加一个方法getCompanysInArray方法,方法的签名和内容如下:
public Company[] getCompanysInArray(){
for (int i = 0 ; i < 5 ; i++){
//实例化新的Company对象
Company comp = new Company();
comp.setId(i);
comp.setName("Name" + i );
comp.setAddress("address" + i);
//将实例化的对象赋值给到数组的对应元素
companysInArray[i] = comp;
}
return companysInArray;
}
2)、扩展Association类,增加一个提供Company对象的Collection的方法
给Association类增加一个方法getCompanysInCollection方法,方法的签名和内容如下:
public Collection getCompanysInCollection(){
for (int i = 0 ; i < 5 ; i++){
//实例化新的Company对象
Company comp = new Company();
comp.setId(i);
comp.setName("Name" + i );
comp.setAddress("address" + i);
//将实例化的对象增加到Collection中
companysInCollection.add(comp);
}
return companysInCollection;
}
3)、访问方法
通过JXPath访问数组的详细代码如下:
//实例化Association类
Association association = new Association();
//初始化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//使用Lenient访问模式访问嵌套属性
context.setLenient(true);
//通过JXPath语法访问数组下标为4的记录的name属性
//getValue方法的参数"companysInArray[5]/name"中的
//部分companysInArray是Association的属性,
//5代表访问数组中第5个元素,name表示第五个元素的属性名
String name = (String) context.getValue("companysInArray[5]/name");
//通过XPath语法访问集合中第4条记录的name属性
//getValue方法的参数" companysInColletion[5]/name"中的
//部分companysInColletion是Association的属性名,
//5代表访问集合中第5个元素,name表示第五个元素的属性名
String name = (String) context.getValue("companysInColletion[5]/name");
[注] XPath访问数组或者集合时,数组或者集合的下标是从1开始,这点和java语言中规定的从0开始有点不同
4)、获取多条记录
既然是访问集合数据,那么经常会出现这样的需求:需要获得符合条件的多条记录。这种情况使用JXPath也非常方便,使用context对象的iterator方法加上相应的XPath信息就可以了,操作后返回的内容保存在Iterator对象中,非常方便就可以访问。具体的代码如下:
A、按记录所在的位置获取
//实例化Association类
Association association = new Association();
//实例化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//获得数组中下标大于3的所有记录
//iterator方法的参数companysInArray [position() > 3]使用了XPath的语法
//其中的companysInArray是Association对象的属性,他是一个数组
// position()是XPath中的内置函数,获得记录在数组中的下标
Itarator companysInArray =
context.iterate("companysInArray [position() > 3]");
//获得集合中所处位置大于3的所有记录
//iterator方法的参数companysInCollection [position() > 3]使用了XPath的语法
//其中的companysInCollection是Association对象的属性
//他是一个Collection类型或者是其子类型的一个实例
//position()是XPath中的内置函数,获得记录在集合中的位置
Itarator companysInCollection =
context.iterate("companysInCollection [position() > 3]");
B、按指定的规则获取
//实例化Association类
Association association = new Association();
//实例化JXPath上下文
JXPathContext context = JXPathContext.newContext(association);
//获得数组中对象的name属性为'name3'的所有对象
//iterator方法的参数companysInArray [name='name3']使用了XPath的语法
//其中的companysInArray是Association对象的属性,他是一个数组
//name='name3'是条件表达式,表示返回对象的name属性值必须是name3
Itarator companysInArray =
context.iterate("companysInArray [name='name3']");
//获得集合中对象的name属性为'name2'的所有对象
//iterator方法的参数companysInCollection [name='name3']使用了XPath的语法
//其中的companysInCollection是Association对象的属性
//他是一个Collection类型或者是其子类型的一个实例
//name='name3'是条件表达式,表示返回对象的name属性值必须是name3
Itarator companysInCollection =
context.iterate("companysInCollection [name='name3']");
6. 访问Map对象的内容
1)、准备符合条件的java类
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jxpath.JXPathContext;
public class MyMapSource {
private Map map = new HashMap();
public MyMapSource(){
map.put("id",new Integer(5));
map.put("name","name");
}
public Map getMapSource(){
return this.map;
}
}
2)、使用JXPath访问Map的内容
//实例化MyMapSource对象
MyMapSource myMapSource = new MyMapSource();
//实例化JXPath上下文
JXPathContext context = JXPathContext.newContext(myMapSource);
//通过JXPath访问Map对象的内容
// getValue方法的参数使用了XPath语法
// mapSource/id中的mapSource表示MyMapSource对象的属性,
//他是一个Map类型的对象,id表示获取该Map对象的id字段
Integer id = (Integer) context.getValue("mapSource/id");
7. 访问XML文件
1)、编写自己的XML文件
<?xml version="1.0" ?>
<companys>
<company id="101">
<name>sun</name>
<address>
<street>18 #,WenShan Road</street>
</address>
</company>
<company id="102">
<name>ibm</name>
<address>
<street>18 #,WenEr Road</street>
</address>
</company>
</companys>
2)、编写一个类,返回符合条件的company内容
import java.net.URL;
import org.apache.commons.jxpath.Container;
import org.apache.commons.jxpath.xml.DocumentContainer;
public class Companys {
private Container companys = null;
public Container getCompanys(){
if (companys == null){
//获取XML文件的内容
URL url = getClass().getResource("companys.xml");
//将XML的内容绑定到companys对象
companys = new DocumentContainer(url);
}
return companys;
}
}
发表评论
-
java 类的加载 以及 ClassLoader
2020-04-16 09:43 473Class Loader 类加载器: 类加载器负责加载 ... -
Stack 的实现原理深入剖析
2020-04-06 13:26 494Stack 介绍: Stack是栈。 ... -
Vector 的实现原理深入剖析
2020-04-06 13:17 370Vector介绍: Vector 是矢量队列,它是JDK1. ... -
JDK 分析工具
2020-04-05 17:30 387常用分析工具: jps:显示指定系统中所有的HotSpot虚 ... -
二叉树的深度优先遍历和广度优先遍历
2020-03-10 09:33 617概述: 1、深度优先遍历(Depth-First-Sear ... -
Hashtable 的实现原理深入剖析
2020-02-18 20:59 563一、Hashtable的基本方法: 1、定义: HashT ... -
jdk 1.8 新特性
2020-02-17 13:43 3831、default关键字 ... -
Zookeeper 总结
2020-01-10 14:53 296zookeeper是一个开源的分 ... -
Java IO 架构
2019-11-11 16:39 354主要两类: 磁盘I/O 网络I/O 基于字节 ... -
Java 数据结构与算法
2019-04-03 10:25 526程序=数据结构+算法 ... -
消息队列之 RabbitMQ
2018-10-16 11:53 830RabbitMQ 特点 RabbitMQ 是一个由 Erla ... -
Java语言异常(Exception)
2018-10-09 11:40 554异常,是Java中非常常用 ... -
Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
2018-08-17 09:47 1477首先介绍一些乐观锁与 ... -
Java 高性能编程注意事项
2016-11-17 09:55 6511. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担, ... -
Netty 解析
2017-03-07 13:47 1227Linux网络IO模型: Linux ... -
Disruptor 介绍
2016-07-04 15:53 3118并发的复杂性: 在计算机科学中,并发的意思是两个或两 ... -
Apache kafka 解读
2016-06-29 12:42 874消息队列应用场景:异步处理、应用解耦、流量削锋、日志处理、消息 ... -
2016年Java 面试题总结
2016-01-18 13:34 54798多线程、并发及线程的基础问题: 1)Java 中能创建 vo ... -
java 内存模型
2015-12-29 13:44 821JAVA内存模型: Java内存 ... -
JVM 深入剖析
2015-12-29 12:51 1100JVM是JAVA虚拟机(JAVA Virtual Machin ...
相关推荐
通过使用JXPath,开发者可以方便地遍历和操作Java对象的属性,就如同在XML文档中使用XPath查询元素一样。 **二、JXPath工作原理** JXPath的工作原理基于Java反射API,它可以解析Java对象的结构,并根据指定的路径...
"jxpath"则代表Java XPath API,这是一个用于在Java对象模型(如JavaBeans或XML DOM)中导航的库,它使用XPath表达式来查找、修改和评估节点。 **Apache Commons JXPath** Apache Commons JXPath是Apache Commons...
jxpath jar包 JXPATH是通过简单的表达式,可以在JAVA的类对象层次中进行查询
jar包,亲测可用
jar包,亲测可用
Commons-JXPath 提供了使用Xpath语法操纵符合Java类命名规范的 JavaBeans的工具。也支持 maps, DOM 和其他对象模型。. Lang Commons-Lang 提供了许多许多通用的工具类集,提供了一些java.lang中类的扩展功能 Latka...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,测试可用
离线安装包,亲测可用
5. **commons-jxpath-1.3.jar**: JXPath 是一种基于 XPath 的 API,用于在 Java 对象树中导航,可以方便地获取和设置对象属性,特别适用于 XML 数据的操作和解析。 6. **commons-configuration-1.6.jar**: 提供了...
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用