针对项目中常用的配置项且需要变动的,最好定义实体类设置默认值,并将实体类转化为Json或Xml存储在数据库中.
对于XML不仅可以解决路径问题,而且可以防止项目构建时配置文件的覆盖问题.
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();
}
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;
}
Gson里最重要的对象有2个Gson 和 GsonBuilder。
Gson有2个最基本的方法
1)toJson() – 转换java 对象到JSON
2)fromJson() – 转换JSON到java对象
参考: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)+"毫秒!");
}
}