数据类型转换

针对项目中常用的配置项且需要变动的,最好定义实体类设置默认值,并将实体类转化为Json或Xml存储在数据库中.
对于XML不仅可以解决路径问题,而且可以防止项目构建时配置文件的覆盖问题.


1.String与Map相互转化

1)String转Map
public static Map transStringToMap(String mapString){  
	  Map map = new HashMap();  
	  StringTokenizer items;  
	  for(StringTokenizer entrys = new StringTokenizer(mapString, "&");entrys.hasMoreTokens();   
		map.put(items.nextToken(),(items.hasMoreTokens() ? ((items.nextToken())) : null)))  
		  items = new StringTokenizer(entrys.nextToken(), "=");  
	  return map;  
} 
2).Map转String
public static String transMapToString(Map map){  
  java.util.Map.Entry entry;  
  StringBuffer sb = new StringBuffer();  
  for(Iterator iterator = map.entrySet().iterator(); iterator.hasNext();)  
  {  
    entry = (java.util.Map.Entry)iterator.next();  
      sb.append(entry.getKey().toString()).append( "'" ).append(null==entry.getValue()?"":  
      entry.getValue().toString()).append (iterator.hasNext() ? "^" : "");  
  }  
  return sb.toString();  
}  

2.Xml字符串转Java对象

	
public static  T getObjFromXml(String content, T object) {
	//将从API返回的XML数据映射到Java对象
	XStream xStreamForResponseData = new XStream();
	xStreamForResponseData.alias("xml", object.getClass());
	xStreamForResponseData.ignoreUnknownElements();//暂时忽略掉一些新增的字段
	@SuppressWarnings("unchecked")
	T t = (T) xStreamForResponseData.fromXML(content, object);
	return t;
}

3.实体类和JSON对象相互转化

Gson里最重要的对象有2个Gson 和 GsonBuilder。

Gson有2个最基本的方法

1)toJson() – 转换java 对象到JSON

2)fromJson() – 转换JSON到java对象


4.实体类和XML对象相互转化

参考:dom4j对XML数据文件的增删查改操作
1.引入maven的Jar包


    dom4j
    dom4j
    1.6.1
2.转化工具类
import java.io.File;
import java.io.FileWriter;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


@SuppressWarnings("unchecked")
public class XmlUtils {

	private static final String fileName = "config.xml";
	
    public static boolean modifigXML(Object obj,String comment){
        boolean isOk = false;
        try{
        	//建立document对象
            Document doc = DocumentHelper.createDocument();
            //建立XML文档的根books
            Element root = doc.addElement("xmlModel");
            root.addComment(comment);//加入一行注释
            Field[] field = obj.getClass().getDeclaredFields();  
            for (int i = 0; i < field.length; i++)  {  
                String name = field[i].getName(); 
                Element title = root.addElement(name);
                name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1)  .toUpperCase());  
                Method m = obj.getClass().getMethod("get" + name);  
                String value = (String) m.invoke(obj); 
                title.setText(value);
            }
            //将doc中的内容写入文件中
            try{
//            	String filePath = XmlUtils.class.getClassLoader().getResource(fileName).getFile();// 文件的路径  
            	System.out.println("-----更新路径------"+fileName);
                FileWriter newFile = new FileWriter(new File(fileName));
                XMLWriter newWriter = new XMLWriter(newFile);
                newWriter.write(doc);
                newWriter.close();
            }catch(Exception e){
                e.printStackTrace();
            }
            System.out.println("正在格式化中...");
            if(formatXML()) System.out.println("恭喜,格式化完成!");
            else System.out.println("格式化失败!请检查后重新再试!");;
            isOk = true; 
        }catch(Exception e){
            e.printStackTrace();
        }
        return isOk;
    }

   /**
     *获取xml数据并转换为实体类
     *
     */
    public static Object readXML(){
    	Object object = null;
        try{
            SAXReader reader = new SAXReader();
//            InputStream  inputStream   = XmlUtils.class.getClassLoader().getResourceAsStream(fileName);// 文件的路径  
            Document doc = reader.read(fileName);
            Element root=doc.getRootElement();//获取根节点  ;
			List elementlist = root.elements();//所有一级子节点的list  
            Map map = new HashMap();
            for(Element e:elementlist){//遍历所有一级子节点  
                 map.put(e.getName(),e.getText());
            }
            object = mapToBean(map,XmlModel.class);
        }catch(Exception e){
            e.printStackTrace();
        }
		return object;
    }
    
    /**
    * map转换为实体类
    * @param map   需要转换的map
    * @param cls   目标javaBean的类对象
    * @return  目标类object
    * @throws Exception
    */
   public static Object mapToBean(Map map,Class cls) throws Exception{
       Object object = cls.newInstance();
       for (String key : map.keySet()){
           Field temFiels = cls.getDeclaredField(key);
           temFiels.setAccessible(true);
           temFiels.set(object, map.get(key));
       }
       return object;
   }
   
   /**
    * xml格式化
    * 默认的输出方式为紧凑方式,默认编码为UTF-8,
    * 但对于我们的应用而言,一般都要用到中文,
    * 并且希望显示时按自动缩进的方式的显示,这就需用到OutputFormat类。
    */
   public static boolean formatXML(){
       boolean isOk = false;
       try{
           SAXReader reader = new SAXReader();
//           InputStream  inputStream   = XmlUtils.class.getClassLoader().getResourceAsStream(fileName);// 文件的路径  
           Document doc = reader.read(fileName);
           XMLWriter formatWriter = null;
           OutputFormat format = OutputFormat.createPrettyPrint();
           format.setEncoding("utf-8");
           formatWriter = new XMLWriter(new FileWriter(new File(fileName)),format);
           formatWriter.write(doc);
           formatWriter.close();
           isOk = true;
       }catch(Exception e){
           e.printStackTrace();
       }
       return isOk;
   }
    

    public static void main(String[] args){
        long start = System.currentTimeMillis();//开始计时
        XmlUtils dom4jDemo = new XmlUtils();
		
        System.out.println("正在更新中...");
        XmlModel xmlModel = new XmlModel();
        xmlModel.setPhone_count(String.valueOf(7));
        xmlModel.setIdcard_count(String.valueOf(8));
        xmlModel.setBank_card_count(String.valueOf(9));
        boolean isOk_modi = dom4jDemo.modifigXML(xmlModel,new Date().toString());
        if(isOk_modi) System.out.println("恭喜,更新完成!");
        else System.out.println("更新失败!请检查后重新再试!");
        
        System.out.println("正在格式化中...");
        boolean isOk_format = dom4jDemo.formatXML();
        if(isOk_format) System.out.println("恭喜,格式化完成!");
        else System.out.println("格式化失败!请检查后重新再试!");
        
        System.out.println("正在读取文件 "+fileName+" ...");
        System.out.println("------------------------------------------------");
        dom4jDemo.readXML();
        System.out.println("------------------------------------------------");
        System.out.println(fileName+"读取成功!");
        System.out.println("一共耗时: "+(System.currentTimeMillis()-start)+"毫秒!");
    }
}








你可能感兴趣的:(工具大全)