List > 與 json 互轉


近期做指紋識別,需要用到緩存文件,數據量並不大,用redis不合適,所以用到了txt文件。

思路是 1、定時查詢指紋,存到txt緩存文件中。

       2、新增或刪除指紋時,查詢指紋,存到txt緩存文件中。

    3、需要對比查詢指紋時,從txt緩存文件中查找,若緩存文件為空,則從數據庫查找。

 

實現后,速度從9S提升到了最快0.7S。

期間用到了 List<Map<String, Object>> 轉為 json 存到txt文件中,txt 文件中的 json 內容轉為 List<Map<String, Object>> 。

轉換方式如下:

1、List<Map<String, Object>> 轉為 json(String)

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();
        }
    }

 

 

2、 json 轉為 List<Map<String, Object>>

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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM