Java中List或者HashMap对象-序列化和反序列化并附读写文件操作

来源:互联网 发布:mac可清除空间如何清除 编辑:程序博客网 时间:2024/05/16 17:52
关于常用的序列化工具可以看下文章 浅析若干Java序列化工具
闲言少叙,直接上代码。
Json格式的序列化和反序列化使用alibaba的Fastjson,Maven项目需要引用包
 
<dependency>    <groupId>com.alibaba</groupId>     <artifactId>fastjson</artifactId>     <version>1.1.25</version> </dependency>

之后就可以直接写代码了
     
List<Entity>list=new ArrayList<Entity>();String listString = JSON.toJSONString(list, true);readAndWriteJson.writeFile("D:\\ljx.txt", listString);String listString2=readAndWriteJson.readFile("D:\\ljx.txt");List<Entity> list2 = JSON.parseArray(listString2, Entity.class);

注意:Entity是类,可以自己定义。
下面的代码是文件操作的工具类
package *****;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;public class readAndWriteJson {    /** * 将字符串写如文件 *  * @param filePath 文件所在路径 * @param input 字符串 * @throws IOException 异常 */public static void writeFile(String filePath, String input) throws IOException {FileWriter fw = new FileWriter(filePath);PrintWriter out = new PrintWriter(fw);out.write(input);out.println();fw.close();out.close();}    /** * 读取文本文件内容 *  * @param filePath文件所在路径 * @return 文本内容 * @throws IOException 异常 */public static String readFile(String filePath) throws IOException {StringBuffer sb = new StringBuffer();readToBuffer(sb, filePath);return sb.toString();}/** * 将文本文件中的内容读入到buffer中 *  * @param bufferbuffer * @param filePath文件路径 * @throws IOException异常 */public static void readToBuffer(StringBuffer buffer, String filePath) throws IOException {InputStream is = new FileInputStream(filePath);String line; // 用来保存每行读取的内容BufferedReader reader = new BufferedReader(new InputStreamReader(is));line = reader.readLine(); // 读取第一行while (line != null) { // 如果 line 为空说明读完了buffer.append(line); // 将读到的内容添加到 buffer 中buffer.append("\n"); // 添加换行符line = reader.readLine(); // 读取下一行}reader.close();is.close();}}



为了代码重用写下了类可以帮助序列化和反序列化链表或者HashMap


import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;public class JsonSerilizable {/* 将链表序列化为字符串存入json文件中 */public static String serilizableForList(Object objList, String OutfilePathName)throws IOException {String listString = JSON.toJSONString(objList, true);// (maps,CityEntity.class);readAndWriteJson.writeFile(OutfilePathName, listString);return listString;}/* 将json文件中的内容读取出来,反序列化为链表 */public static <T> List<T> deserilizableForListFromFile(String InputfilePathName, Class<T> clazz)throws IOException {String listString2 = readAndWriteJson.readFile(InputfilePathName);List<T> list2 = JSON.parseArray(listString2, clazz);return list2;}/* 将HashMap序列化为字符串存入json文件中 */public static String serilizableForMap(Object objMap, String OutfilePathName)throws IOException {String listString = JSON.toJSONString(objMap, true);// (maps,CityEntity.class);readAndWriteJson.writeFile(OutfilePathName, listString);return listString;}/* 将json文件中的内容读取出来,反序列化为HashMap */public static <T, K> HashMap<K, T> deserilizableForMapFromFile(String InputfilePathName,Class<T> clazz) throws IOException {String listString2 = readAndWriteJson.readFile(InputfilePathName);Map<K, T> map = JSON.parseObject(listString2, new TypeReference<Map<K, T>>() {});return (HashMap<K, T>) map;}//使用方法 注意Entity为随机定义,使用时用自己的类名替换下就可以用了/*String pathName = "src/test/java/com/...../resources/file.json";List<Entity> entityList = new ArrayList<Entity>();JsonSerilizable.serilizableForList(entityList, pathName);List<Entity> entityList2 = JsonSerilizable.deserilizableForListFromFile(pathName, Entity.class);HashMap<Integer, Entity> Map = new HashMap<Integer, Entity>();JsonSerilizable.serilizableForMap(Map, pathName);HashMap<Integer, Entity> Map2 = JsonSerilizable.deserilizableForMapFromFile(pathName, Entity.class);*/}








0 0
原创粉丝点击