利用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();
}
}
接下来的部分是根据路径名获取文件,类名反射部分
* 向特定的路径生成文件
* 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;
}
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();
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 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 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;
}
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;
}
下面是需要的包
阅读全文
0 0
- 利用json和反射写了一个对类的读取和写入
- Json写入和读取
- 利用java 反射原理写了一个赋值和取值通用类
- json的写入和解析(读取)
- 利用泛型和反射对Java对象集合转换成Json的工具类
- java 对Excel的读取和写入
- 从配置文件读取数据连接信息,利用泛型和java反射机制,写一个公共的增删改查数据库操作类
- json读取和写入数据
- as3 对JSON的读取和发送
- AS3 对JSON的读取和发送
- 利用PHPExcel实现Excel文件的写入和读取
- Json用Java读取和写入
- php写入和读取json数据方法
- LitJSON之JSON读取和写入
- java 利用注释和反射写一个简单的SQL语句拼接程序,很简单初学者
- C++对txt文件的读取和写入
- VC++中对文件的写入和读取
- VC++中对文件的写入和读取
- 各种加密算法比较
- 倍增LCA(最近公共祖先)算法详解
- 判断IE浏览器版本
- C++学习笔记之类的基本概念1
- C# namespace与java package
- 利用json和反射写了一个对类的读取和写入
- java8 [method reference]
- PHP常用函数
- Android的消息循环机制 Looper Handler类分析
- RecyclerView使用,item分割线,全选反选按钮实现
- CountDownLatch
- 淘宝新店如何破零
- LeetCode 668. Kth Smallest Number in Multiplication Table
- css---flex布局中,如何响应式 得水平垂直居中?flex子元素左右 上下居中