近期作指紋識別,須要用到緩存文件,數據量並不大,用redis不合適,因此用到了txt文件。redis
思路是 一、定時查詢指紋,存到txt緩存文件中。數據庫
二、新增或刪除指紋時,查詢指紋,存到txt緩存文件中。json
三、須要對比查詢指紋時,從txt緩存文件中查找,若緩存文件爲空,則從數據庫查找。緩存
實現後,速度從9S提高到了最快0.7S。app
期間用到了 List<Map<String, Object>> 轉爲 json 存到txt文件中,txt 文件中的 json 內容轉爲 List<Map<String, Object>> 。ui
轉換方式以下:spa
一、List<Map<String, Object>> 轉爲 json(String)code
List<Map<String, Object>> list= openDao.queryForList(map); String str = JSON.toJSONString(list); //此行轉換 caChe.writeFile(finerPath,finerPath+"finerCaChe.txt",str);
writeFile 方法對象
/** * 寫入TXT文件 */ public static void writeFile(String dirPath,String path,String txt) { try { judeDirExists(new File(dirPath)); File writeName = new File(path); // 相對路徑,若是沒有則要創建一個新的output.txt文件 writeName.createNewFile(); // 建立新文件,有同名的文件的話直接覆蓋 try (FileWriter writer = new FileWriter(writeName); BufferedWriter out = new BufferedWriter(writer) ) { out.write(txt); // \r\n即爲換行 out.flush(); // 把緩存區內容壓入文件 } } catch (IOException e) { e.printStackTrace(); } }
二、 json 轉爲 List<Map<String, Object>>blog
StringBuilder line = readFile(path); //讀取txt文本內容 List< Map<String,Object>> listw = toListMap(line.toString()); //此行轉換
toListMap方法
public static List<Map<String, Object>> toListMap(String json){ List<Object> list =JSON.parseArray(json); List< Map<String,Object>> listw = new ArrayList<Map<String,Object>>(); for (Object object : list){ Map<String,Object> ageMap = new HashMap<String,Object>(); Map <String,Object> ret = (Map<String, Object>) object;//取出list裏面的值轉爲map listw.add(ret); } return listw; }
readFile方法
/** * 讀入TXT文件 */ public static StringBuilder readFile(String path) { String pathname = path; // 絕對路徑或相對路徑均可以,寫入文件時演示相對路徑,讀取以上路徑的input.txt文件 //防止文件創建或讀取失敗,用catch捕捉錯誤並打印,也能夠throw; //不關閉文件會致使資源的泄露,讀寫文件都同理 //Java7的try-with-resources能夠優雅關閉文件,異常時自動關閉文件;詳細解讀https://stackoverflow.com/a/12665271 StringBuilder txt =new StringBuilder(""); try (FileReader reader = new FileReader(pathname); BufferedReader br = new BufferedReader(reader) // 創建一個對象,它把文件內容轉成計算機能讀懂的語言 ) { String line; while ((line = br.readLine()) != null) { // 一次讀入一行數據 txt.append(line); } } catch (IOException e) { e.printStackTrace(); } return txt; }