閒言少敘,直接上代碼。
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);*/
}