java如何讀寫json文件
阿新 • • 發佈:2017-09-25
ebo contex efault 項目 lean 積分 但是 .get eof
在實際項目開發中,有時會遇到一些全局的配置緩存,最好的做法是配置redis數據庫作為數據緩存,而當未有配置redis服務器時,讀取靜態資源文件(如xml、json等)也是一種實現方式,但是這有一個弊端,因為作為靜態資源存儲在站內勢必就導致信息的安全性很低,所以如果采用這種方式則建議記錄一些安全要求很低的配置屬性,當然最好的做法就是使用redis緩存技術。下面就json文件的讀寫進行進一步說明。
1、json通用文件讀取方法,這個方法會返回map對象:
/** * json讀取 * * @param request * @param path *@return */ public static List<Map> JsonRead(HttpServletRequest request, String path) { List<Map> maps = null; String dir = request.getSession().getServletContext().getRealPath(path); System.out.println(path); System.out.println(dir); if (dir == null) { System.out.println("找不到數據"); return null; } try { File file = new File(dir); if (!file.exists()) { file.createNewFile(); } String str = FileUtils.readFileToString(file, "UTF-8"); maps= (List) JSONArray.fromObject(str); } catch (IOException e) { e.printStackTrace(); } return maps; };
2、json指定文件讀取方法,這個方法是針對特定的json文件,返回值也是特定的實體對象:
首先要先定義實體類(我這裏就拿項目中一個demo做示例):
package com.net.entity; /** * 系統廣告圖片 * @author zhangdi * */ public class SysAdverImg { private int id;//方便後期數據庫拓展 private String img11;//首頁廣告1 private String img12;//首頁廣告2 private String img13;//首頁廣告3 private String img21;//積分廣告1 private String img22;//積分廣告2 private String img23;//積分廣告3 private String url11;//首頁廣告鏈接1 private String url12;//首頁廣告鏈接2 private String url13;//首頁廣告鏈接3 private String url21;//積分廣告鏈接1 private String url22;//積分廣告鏈接2 private String url23;//積分廣告鏈接3 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getImg11() { return img11; } public void setImg11(String img11) { this.img11 = img11; } public String getImg12() { return img12; } public void setImg12(String img12) { this.img12 = img12; } public String getImg13() { return img13; } public void setImg13(String img13) { this.img13 = img13; } public String getImg21() { return img21; } public void setImg21(String img21) { this.img21 = img21; } public String getImg22() { return img22; } public void setImg22(String img22) { this.img22 = img22; } public String getImg23() { return img23; } public void setImg23(String img23) { this.img23 = img23; } }
第二步:針對這個特定實體類來寫特定的json文件讀取方法:
/* * 取出廣告圖片內容,填充對象 */ public SysAdverImg findSysAdverImg(String path) { SysAdverImg config = new SysAdverImg(); String sets = ReadFile(path);// 獲得json文件的內容 System.out.println(sets); // 去掉json中的[] sets = sets.substring(1, sets.length() - 1); System.out.println(sets); JSONObject jo = JSONObject.fromObject(sets);// 格式化成json對象 System.out.println(jo.toString()); config.setId(Integer.valueOf(jo.getString("id"))); config.setImg11(jo.getString("img11")); config.setImg12(jo.getString("img12")); config.setImg13(jo.getString("img13")); config.setImg21(jo.getString("img21")); config.setImg22(jo.getString("img22")); config.setImg23(jo.getString("img23")); config.setUrl11(jo.getString("url11")); config.setUrl12(jo.getString("url12")); config.setUrl13(jo.getString("url13")); config.setUrl21(jo.getString("url21")); config.setUrl22(jo.getString("url22")); config.setUrl23(jo.getString("url23")); return config; }
這裏調用的ReadFile方法如下:
// 讀文件,返回字符串 public String ReadFile(String path) { File file = new File(path); BufferedReader reader = null; String laststr = ""; try { // System.out.println("以行為單位讀取文件內容,一次讀一整行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; // 一次讀入一行,直到讀入null為文件結束 while ((tempString = reader.readLine()) != null) { // 顯示行號 System.out.println("line " + line + ": " + tempString); laststr = laststr + tempString; line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } return laststr; }
3、特定的json文件修改(即對json文件進行寫的操作)
首先是編寫文件寫的通用操作方法:
// 把json格式的字符串寫到文件 public boolean writeFile(String filePath, String sets) { FileWriter fw; try { fw = new FileWriter(filePath); PrintWriter out = new PrintWriter(fw); out.write(sets); out.println(); fw.close(); out.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; } }
再就特定的實體類執行寫的操作(這裏還是以第二步的實體類為例):
/** * 系統後臺更新廣告圖片 * @param img * @param type * @param request * @param resq * @return 200 更新成功 * 501 上傳圖片為空 * 502 上傳類型為空 * 503 無法讀取json文件 * 504 錯誤的類型 * 505 json文件更新失敗 * 506 上傳鏈接為空 */ @RequestMapping(value="updateAdverImgConfig" ,method=RequestMethod.POST, produces="application/json;charset=utf-8") @ResponseBody public String updateAdverImgConfig( @RequestParam("img")String img, @RequestParam("url")String url, @RequestParam("type")Integer type, HttpServletRequest request, HttpServletResponse resq){ if(img==null||img==""){ return "501";//圖片為空 } if(type==null){ return "502";//類型為空 } if(url==null||url==""){ return "506";//鏈接為空 } //系統路徑 String pathRoot = request.getSession().getServletContext().getRealPath(""); //網站配置路徑 String baseRoot = jsonUtil.findSysConfig(pathRoot+"/config/config.json").getBaseUrl(); //讀取出源文件 SysAdverImg sai = new SysAdverImg(); try { sai = jsonUtil.findSysAdverImg(pathRoot+"/config/adver_img.json"); } catch (Exception e) { return "503";//無法讀取源文件 } //處理傳過來的base64 // 這裏處理傳過來的廣告圖片base64 if(img!=""||img!=null){ //圖片的存儲路徑 String newImaPath = File.separator +"img"+File.separator+"imgZip" + File.separator; String path = newImaPath+UtilNet.getRandomNumberString(24)+".jpg"; //截取字符串,將data:image/jpg;base64去掉,取剩余的字符串 String imgType = img.substring(11, 14); if(imgType.equals("jpe")){ img = img.substring(23); }else if(imgType.equals("jpg")||imgType.equals("png")){ img = img.substring(22); }else if(imgType.equals("gif")){ //data:image/gif;base64,R0l img = img.substring(22); }else{ img = img.substring(22); } //進行解碼 ImageBase64Util.GenerateImage(img, path,request); //賦值成絕對路徑 System.out.println(path); path = baseRoot+path; System.out.println(path); // 路徑賦值 switch (type) { case 0://首頁廣告1 sai.setImg11(path); sai.setUrl11(url); break; case 1://首頁廣告2 sai.setImg12(path); sai.setUrl12(url); break; case 2://首頁廣告3 sai.setImg13(path); sai.setUrl13(url); break; case 3://積分廣告1 sai.setImg21(path); sai.setUrl21(url); break; case 4://積分廣告2 sai.setImg22(path); sai.setUrl22(url); break; case 5://積分廣告3 sai.setImg23(path); sai.setUrl23(url); break; default: return "504"; } } //寫入json文件中 String config = "[{"+"\n" +" \"" +"id"+"\" "+":"+" \""+sai.getId()+"\","+"\n" +" \"" +"img11"+"\" "+":"+" \""+sai.getImg11()+"\","+"\n" +" \"" +"img12"+"\" "+":"+" \""+sai.getImg12()+"\","+"\n" +" \"" +"img13"+"\" "+":"+" \""+sai.getImg13()+"\","+"\n" +" \"" +"img21"+"\" "+":"+" \""+sai.getImg21()+"\","+"\n" +" \"" +"img22"+"\" "+":"+" \""+sai.getImg22()+"\","+"\n" +" \"" +"img23"+"\" "+":"+" \""+sai.getImg23()+"\","+"\n" +" \"" +"url11"+"\" "+":"+" \""+sai.getUrl11()+"\","+"\n" +" \"" +"url12"+"\" "+":"+" \""+sai.getUrl12()+"\","+"\n" +" \"" +"url13"+"\" "+":"+" \""+sai.getUrl13()+"\","+"\n" +" \"" +"url21"+"\" "+":"+" \""+sai.getUrl21()+"\","+"\n" +" \"" +"url22"+"\" "+":"+" \""+sai.getUrl22()+"\","+"\n" +" \"" +"url23"+"\" "+":"+" \""+sai.getUrl23()+"\""+"\n" +"}]"; boolean isUpdate = jsonUtil.writeFile(pathRoot+"/config/adver_img.json", config); if(isUpdate){ return "200"; }else{ return "505"; } } }
至此關於json文件的讀寫就完成了
java如何讀寫json文件