Java中List或者HashMap對象-序列化和反序列化並附讀寫文件操作

關於常用的序列化工具可以看下文章 淺析若干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);*/

}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章