Java 讀寫json格式的文件方法詳解

openkk 12年前發布 | 166K 次閱讀 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!