java的一些实用工具类(XMLConfiguration/MapUtils/JSON/JSONArray等)

我之前的代码一直都比较凌乱(虽然有无数的注释),嘿嘿!然后,带领我的大牛告诉我说Java的Commons下有许多的工具类,利用它们就可以使我们的代码更简洁了。

现在就实际用到的分享如下,没用到的慢慢学习积累吧!

1.XMLConfiguration——解析xml及properties文件

我们知道,解析xml文件的最基本方式有两种:DOM解析和SAX解析。可能大家和我一样,之前都是用的是这么繁琐的解析方式。

下面这个是SAX解析:

public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {//输入流中传送的是xml格式的内容
		// 将解析结果存储在HashMap中
		Map<String, String> map = new HashMap<String, String>();

		// 从request中取得输入流
		InputStream inputStream = request.getInputStream();
		SAXReader reader = new SAXReader();
		Document document = reader.read(inputStream);
		Element root = document.getRootElement();
		List<Element> elementList = root.elements();

		// 遍历所有子节点
		for (Element e : elementList)
			map.put(e.getName(), e.getText());

		// 释放资源
		inputStream.close();
		inputStream = null;

		return map;
	}//然后,我们<span style="color:#ff0000;">可以从map中获得对应的节点的值</span>,这里就不写了

使用org.apache.commons.configuration.XMLConfiguration工具类:

public static XMLConfiguration getConfig(HttpServletRequest request){
		//使用commons-configuration工具类解析用户发过来的xml消息
		XMLConfiguration config = new XMLConfiguration()
		config.setDelimiterParsingDisabled(true);//加载文件前设置分隔符失效(不使用任何分隔符).
		try {
			config.load(request.getInputStream());//加载输入流中的xml
		} catch (Exception e) {
			e.printStackTrace();
		}
		return config;
	}

/**
	 * 设置响应给用户的消息
	 * @param request
	 * @return
	 */
	public static RespTextMessage setRespTextMessage(HttpServletRequest request) {
		RespTextMessage textMessage = new RespTextMessage();
		XMLConfiguration config = getConfig(request);
		//通过XMLConfiguration可以直接获得xml中的指定属性的值
		String fromUserName = config.getString("FromUserName"); // 发送方微信号,若为普通用户,则是一个OpenID
		String toUserName = config.getString("ToUserName"); // 公众帐号,开发者微信号,接收方微信号
		
		//其次,设置响应给用户的消息
		textMessage.setToUserName(fromUserName);//设置接收方帐号,即普通用户
		textMessage.setFromUserName(toUserName);//设置发送方帐号,即公众帐号
		textMessage.setCreateTime(new Date().getTime());//设置响应时间为当前时间
		textMessage.setMsgType(ImarkContants.MSG_TEXT);//设置响应消息类型为文本消息
		textMessage.setFuncFlag(0);
		
		return textMessage;
	}
另外,XMLConfiguration解析属性文件等功能。
2.MapUtils——操作map或SortedMap 实例的工具类

org.apache.commons.collections.MapUtils此工具类提供了大致有如下方法:


假设我们现在从数据库中查到一个map集合:

Map<String,Object> map= this.baseDao.findFirst(sql);

通常我们判断是否为空或null,需要写"map==null || map.isEmpty";我们可以使用MapUtils的isEmpty方法来直接判断“MapUtils.isEmpty(map)”,也就是isEmpty方法封装了前面的那条语句。

putAll方法可以将数组的键值对放入到一个map中,例如:

     String[][] str = new String[][] { {"RED", "#FF0000"},{"GREEN", "#00FF00"},{"BLUE", "#0000FF"}};

     Map colorMap = MapUtils.putAll(new HashMap(), str);

另外,org.apache.commons.lang.StringUtils这个类的isEmpty可以判断字符串是否为null或empty,而不需要我们这样判断“str == null || str.length() == 0”。

3.JSON,JSONArray——处理json数据

这两个是com.alibaba.fastjson包下的工具类,举个例子,

String jsonStr = "[{'1.':'1'},{'2.':'22'},{'3.':'333'},{'4.':'4444'},{'5.':'55555'}]";
List jsonList =JSONArray.parseArray(respContent);//json字符串转换为list
Object json = jsonList.get(3);//随机获得list的第3条记录
String str = JSON.toJSONString(json);//转换为String,“4444”
上面标红jsonList的那一行获得的第3条记录返回的是个Object对象,不能直接转换为字符串,所以又使用JSON.toJSONString(json)来转换为String类型。
这样比较麻烦,所以我们可以在使用parseArray的时候,直接指定返回类型即可。
 
List<String> jsonList1 = JSONArray.parseArray(respContent,String.class);//json字符串转换为list
String str1 = jsonList1.get(0);
另外也可以转换为JavaBean类,如XXX:
 List<XXX> listPerson =JSON.parseArray(jsonString, XXX.class);
此工具类的maven坐标为:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.35</version>
</dependency>

package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析的XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值