Java 讀寫json格式的文件方法詳解
一、要解決這個問題首先要知道json格式是什么?
JSON格式:
比如學生有學號,姓名,性別等。
用json表示則為:
{"studno":"11111","studname":"wwww","studsex":"男"}(各個字段都是字符型)
這代表一個學生的信息。
如果多個呢?
[{"studno":"122222","studname":"wwww","studsex":"男"},
{"studno":"11111","studname":"xxxx","studsex":"男"},
{"studno":"33333","studname":"ssss","studsex":"男"}]
這就是json格式。
二、那如何操作json格式的文件呢?
這個更簡單了,說白了就是直接讀寫文件,再把讀出來的文件內容格式化成json就可以了。
三、具體操作。
1.有一個實體類,如下:
public class ElectSet { public String xueqi; public String xuenian; public String startTime; public String endTime; public int menshu; public String isReadDB; // {"xueqi":,"xuenian":,"startTime":,"endTime":,"renshu":,"isReadDB":} public String getXueqi() { return xueqi; } public void setXueqi(String xueqi) { this.xueqi = xueqi; } public String getXuenian() { return xuenian; } public void setXuenian(String xuenian) { this.xuenian = xuenian; } public String getStartTime() { return startTime; } public void setStartTime(String startTime) { this.startTime = startTime; } public String getEndTime() { return endTime; } public void setEndTime(String endTime) { this.endTime = endTime; } public int getMenshu() { return menshu; } public void setMenshu(int menshu) { this.menshu = menshu; } public String getIsReadDB() { return isReadDB; } public void setIsReadDB(String isReadDB) { this.isReadDB = isReadDB; } }
2.有一個json格式的文件,存的就是他的信息,如下
{"xuenian":"2007-2008","xueqi":"1","startTime":"2009-07-19 08:30","endTime":"2009-07-22 18:00","menshu":"10","isReadDB":"Y"}
3.具體操作.
public class Operate { /* * 取出文件內容,填充對象 */ public ElectSet findElectSet(String path){ ElectSet electset=new ElectSet(); String sets=ReadFile(path);//獲得json文件的內容 JSONObject jo=JSONObject.fromObject(sets);//格式化成json對象 //System.out.println("------------" jo); //String name = jo.getString("xuenian"); //System.out.println(name); electset.setXueqi(jo.getString("xueqi")); electset.setXuenian(jo.getString("xuenian")); electset.setStartTime(jo.getString("startTime")); electset.setEndTime(jo.getString("endTime")); electset.setMenshu(jo.getInt("menshu")); electset.setIsReadDB(jo.getString("isReadDB")); return electset; } //設置屬性,并保存 public boolean setElect(String path,String sets){ try { writeFile(path,sets); return true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } //讀文件,返回字符串 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; } //把json格式的字符串寫到文件 public void writeFile(String filePath, String sets) throws IOException { FileWriter fw = new FileWriter(filePath); PrintWriter out = new PrintWriter(fw); out.write(sets); out.println(); fw.close(); out.close(); } }
4.調用,使用(在網站的controller里調用的)
public class Use { // 取出json對象 public void GetElectSettings(HttpServletRequest request, HttpServletResponse response) throws Exception { ElectSet electset = new ElectSet(); String absPath = request.getRealPath("\\"); String filePath = absPath + "public\\sets\\electSets.json"; // 這里是調用,大家自己改改,我調用的業務層 的。 electset = businessService.findElectSets(filePath); JSONArray jsonItems = new JSONArray(); jsonItems.add(electset); JSONObject jo = new JSONObject(); jo.put("data", jsonItems); System.out.println(jo); request.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); PrintWriter out = response.getWriter(); out.print(jo); } // 修改json文件 public void ChangeElectSet(HttpServletRequest request, HttpServletResponse response) throws Exception { request.setCharacterEncoding("UTF-8"); response.setContentType("text/json;charset=utf-8"); // log.info("reach ChangeElectSet"); String json = (String) request.getParameter("json").trim(); // log.info("Change ElectSet"); // log.info(json); ElectSet sets = new ElectSet(); JSONObject jsonObject = JSONObject.fromObject(json); sets = (ElectSet) JSONObject.toBean(jsonObject, ElectSet.class); if (sets.getIsReadDB() == "false") { sets.setIsReadDB("否"); } else { sets.setIsReadDB("是"); } String changes = "{\"xuenian\":\"";// 因為json的屬性要用引號,所以要用"轉義一下 changes = sets.getXuenian() + "\",\"xueqi\":\"" + sets.getXueqi() + "\",\"startTime\":\"" + sets.getStartTime() + "\",\"endTime\":\"" + sets.getEndTime() + "\",\"menshu\":\"" + sets.getMenshu() + "\",\"isReadDB\":\"" + sets.getIsReadDB() + "\"}"; System.out.println(changes); String absPath = request.getRealPath("\\"); String filePath = absPath + "public\\sets\\electSets.json"; } }
此文章取材紅黑聯盟,完善了下代碼。
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!