首页 > 代码库 > 基于lucene的案例开发:JsonUtil & XmlUtil

基于lucene的案例开发:JsonUtil & XmlUtil

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43194015


      从这篇博客开始第二大部分就算正式开始了,不过在介绍搜索后台之前,还是先介绍写可能使用的大工具类,这样在后面的搜索后台介绍中,就不会穿插其他的内容介绍。这篇就主要介绍两个工具类:json、xml格式数据处理类。
      
JSON
      在前后台数据通信过程中,json数据格式是一种比较常用的方式。将javabean转化为json格式字符串,可以通过简单的字符串拼接,也可以使用第三方jar包进行处理,这里介绍的类也是基于第三方jar包实现的。代码实现如下:
 /**  
 *@Description:    json数据工具
 */ 
package com.lulei.util;  

import java.io.IOException;
import java.util.HashMap;

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
  
public class JsonUtil {
	
	public static final String NO_DATA = http://www.mamicode.com/"{/"data/":null}";>

      当然这里对第三方jar包进行再一次封装在项目中更简单的使用,上述main函数的运行结果如下(数据经过格式话处理):

技术分享


      至于其他方法如若感兴趣可以自行测试。
      
XML
      在和前台的通信的过程中,xml数据格式也是一种常用方法,同时xml数据格式也是后台配置文件的一种形式。对xml数据的处理,有很多第三方jar包,这是使用的是dom4j,代码实现如下:
 /**  
 *@Description: Xml工具类    
 */ 
package com.lulei.util;  

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;

public class XmlUtil {
	private static String noResult = "<root>no result</root>";

	/**
	 * @param obj
	 * @return
	 * @Author:lulei  
	 * @Description: 将java对象转化为xml格式的字符串
	 */
	public static String parseObjToXmlString(Object obj){
		if (obj == null) {
			return noResult;
		}
		StringWriter sw = new StringWriter();
		JAXBContext jAXBContext;
		Marshaller marshaller;
		try {
			jAXBContext = JAXBContext.newInstance(obj.getClass());
			marshaller = jAXBContext.createMarshaller();
			marshaller.marshal(obj, sw);
			return sw.toString();
		} catch (JAXBException e) {
			// TODO Auto-generated catch block  
			e.printStackTrace();
		}
		return noResult;
	}
	
	/**
	 * @param xml
	 * @return
	 * @Author: lulei  
	 * @Description: 将xml String对象转化为xml对象
	 */
	public static Document createFromString(String xml){
		try {
			return DocumentHelper.parseText(xml);
		} catch (DocumentException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * @param xpath
	 * @param node
	 * @return
	 * @Author: lulei  
	 * @Description: 获取指定xpath的文本,当解析失败返回null
	 */
	public static String getTextFromNode(String xpath,Node node){
		try {
			return node.selectSingleNode(xpath).getText();
		} catch (Exception e) {
			return null;
		}
	}
	
	/**
	 * @param path
	 * @Author: lulei  
	 * @Description: 读取xml文件
	 * @return xml文件对应的Document
	 */
	public static Document createFromPath(String path){
		return createFromString(readFile(path));
	}
	
	/**
	 * @param path
	 * @Author: lulei  
	 * @Description: 读文件
	 * @return 返回文件内容字符串
	 */
	private static String readFile(String path) {
		File file = new File(path);
		FileInputStream fileInputStream;
		StringBuffer sb = new StringBuffer();
		try {
			fileInputStream = new FileInputStream(file);
			//错误使用UTF-8读取内容
			String charset = CharsetUtil.getStreamCharset(file.toURI().toURL(), "utf-8");
			InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, charset);
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
			String s;
			while ((s = bufferedReader.readLine()) != null){
				s = s.replaceAll("\t", "").trim();
				if (s.length() > 0){
					sb.append(s);
				}
			}
			fileInputStream.close();
			bufferedReader.close();
			fileInputStream.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block  
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block  
			e.printStackTrace();
		} 
		return sb.toString();
	}
	
	public static void main(String[] args) {
	}
}


      XmlUtil的一个使用事例如下所示:
 /**  
 *@Description: 章节列表搜索结果    
 */ 
package com.lulei.test;  

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlRootElement;

import com.lulei.util.XmlUtil;
 
@XmlRootElement(name = "root")
public class TestXmlUtil {
	private int count;
	private ArrayList<String> result;
	
	public TestXmlUtil() {
		count = 3;
		result = new ArrayList<String>();
		result.add("test1");
		result.add("test2");
		result.add("test3");
	}
	
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public ArrayList<String> getResult() {
		return result;
	}
	public void setResult(ArrayList<String> result) {
		this.result = result;
	}
	
	public static void main(String[] args) {
		System.out.println(XmlUtil.parseObjToXmlString(new TestXmlUtil()));
	}
}


      运行结果如下图所示(数据经过格式话处理):

技术分享


      在XmlUtil类中使用到了CharsetUtil类,关于CharsetUtil类在以后的博客中再详细介绍(主要作用就是检测文件或者流的编码方式等)。
      
ps:最近发现其他网站可能会对博客转载,上面并没有源链接,如想查看更多关于 基于lucene的案例开发 请点击这里。或访问网址http://blog.csdn.net/xiaojimanman/article/category/2841877

基于lucene的案例开发:JsonUtil & XmlUtil