数据类型转换

来源:互联网 发布:大数据大会 2017 编辑:程序博客网 时间:2024/06/09 06:39

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


1.String与Map相互转化

1)String转Map
public static Map<String,String> transStringToMap(String mapString){    Map<String,String> map = new HashMap<String,String>();    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> 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包

<dependency>    <groupId>dom4j</groupId>    <artifactId>dom4j</artifactId>    <version>1.6.1</version></dependency>
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<Element> elementlist = root.elements();//所有一级子节点的list              Map<String,Object> map = new HashMap<String,Object>();            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<String,Object> 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)+"毫秒!");    }}
原创粉丝点击