利用json和反射写了一个对类的读取和写入

来源:互联网 发布:英雄联盟网络连接断开 编辑:程序博客网 时间:2024/06/16 03:03
写如并生成文件的方法很简单,我就写了一个简单生成txt格式的文件,将其按着类的格式生成json.
代码如下
/**
  * 向特定的路径生成文件
  * wxd
  * 20170901
  */
 public static void writeTest(List<Object> objectList){
  SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//根据日期和时间来生成文件名
  String timeString = df.format(new Date());
  try {
   PrintWriter ou = new PrintWriter(PubParams.PATH+timeString+".txt","UTF-8");//生成文件,编码格式为utf-8
   for(Object o:objectList){//循环出来对象
    ou.println(JsonTrans.ObjectToStr(o));//调用方法写入文件中
   }
   ou.close();//关闭流
  } catch (FileNotFoundException e) {
   
   e.printStackTrace();
  } catch (UnsupportedEncodingException e) {
   
   e.printStackTrace();
  } catch (Exception e) {
   
   e.printStackTrace();
  }
 }
 接下来的部分是根据路径名获取文件,类名反射部分
代码如下:
 public static List<Object> readTest(String path,Class cla){
  List<String> strs = new ArrayList<String>();
  List<Object> objs = new ArrayList<Object>();
  try {
   Scanner in = new Scanner(new FileInputStream(path),"UTF-8");//根据路径获取文件
   Field []fs = cla.getDeclaredFields();//获取对象中的属性
   while(in.hasNextLine()){
    String str = in.nextLine();//读出一行,即是一个类
    Object obj = cla.newInstance();//根据类名反射一个实例化
    try {
     Map<String,Object> resultMap = JsonTrans.transJsonToComplexMap(str);//将文件读出来生成map格式
     Field idF = null;
     for(Field f:fs){//循环对象中的属性
      for(String  key:resultMap.keySet()){
       if(f.getName().equalsIgnoreCase(key)){//对比map和对象的属性名,相同即赋值
        idF = cla.getDeclaredField(key);//给实例化出来的赋值
        idF.setAccessible(true);
        idF.set(obj, resultMap.get(key));
       }
      }
     }
     objs.add(obj);//添加进
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return objs;
 }
以下是json的工具
public class JsonTrans {
 private static ObjectMapper objectMapper = new ObjectMapper();
 private static JSONParser parser = new JSONParser();
//该方法是用来将对象转换为字符串的
 public static String ObjectToStr(Object obj){
  objectMapper.configure(Feature.WRAP_ROOT_VALUE, false);
  String result = "";
  try {
   result = objectMapper.writeValueAsString(obj);
  }  catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
//该方法是用来将字符串转换为map类型的
 public static Map<String,Object> transJsonToComplexMap (String datJson)throws Exception{
  Map<String,Object> resultMap = null;
  try {
   resultMap = (Map<String,Object>)parser.parse(datJson);
  } catch (Exception e) {
   
   e.printStackTrace();
  }
  return resultMap;
 }

以下为测试类
public class JsonTrans {
 private static ObjectMapper objectMapper = new ObjectMapper();
 private static JSONParser parser = new JSONParser();
 public static String ObjectToStr(Object obj){
  objectMapper.configure(Feature.WRAP_ROOT_VALUE, false);
  String result = "";
  try {
   result = objectMapper.writeValueAsString(obj);
  }  catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 public static Map<String,Object> transJsonToComplexMap (String datJson)throws Exception{
  Map<String,Object> resultMap = null;
  try {
   resultMap = (Map<String,Object>)parser.parse(datJson);
  } catch (Exception e) {
   
   e.printStackTrace();
  }
  return resultMap;
 }
下面是需要的包

原创粉丝点击