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

          一、要解決這個問題首先要知道json格式是什么?

          JSON格式:
          比如學(xué)生有學(xué)號,姓名,性別等。
          用json表示則為:
          {"studno":"11111","studname":"wwww","studsex":"男"}(各個字段都是字符型)

          這代表一個學(xué)生的信息。

          如果多個呢?

          [{"studno":"122222","studname":"wwww","studsex":"男"},
          {"studno":"11111","studname":"xxxx","studsex":"男"},
          {"studno":"33333","studname":"ssss","studsex":"男"}]

          這就是json格式。

          二、那如何操作json格式的文件呢?

          這個更簡單了,說白了就是直接讀寫文件,再把讀出來的文件內(nèi)容格式化成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格式的文件,存的就是他的信息,如下

          Sets.json:
          {"xuenian":"2007-2008","xueqi":"1","startTime":"2009-07-19 08:30","endTime":"2009-07-22 18:00","menshu":"10","isReadDB":"Y"}

          3.具體操作.
          /*
          * 取出文件內(nèi)容,填充對象
          */
          public ElectSet findElectSet(String path){
             ElectSet electset=new ElectSet();
             String sets=ReadFile(path);//獲得json文件的內(nèi)容
             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;
          }
          //設(shè)置屬性,并保存
          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("以行為單位讀取文件內(nèi)容,一次讀一整行:");
               reader = new BufferedReader(new FileReader(file));
               String tempString = null;
               int line = 1;
               //一次讀入一行,直到讀入null為文件結(jié)束
               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.調(diào)用,使用(在網(wǎng)站的controller里調(diào)用的)

          //取出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);//這里是調(diào)用,大家自己改改,我調(diào)用的業(yè)務(wù)層的。
             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的屬性要用引號,所以要用"轉(zhuǎn)義一下
             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";

          posted on 2012-05-19 09:09 youngturk 閱讀(1447) 評論(0)  編輯  收藏 所屬分類: Ajax

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結(jié)構(gòu)
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临西县| 唐海县| 邢台县| 镇远县| 绵阳市| 三穗县| 南通市| 巧家县| 安达市| 沅陵县| 夏河县| 融水| 桃园县| 乌兰浩特市| 玉树县| 海安县| 舟山市| 明水县| 鄂托克前旗| 通辽市| 慈溪市| 泽库县| 刚察县| 福鼎市| 秦安县| 南乐县| 新和县| 成武县| 邢台市| 茌平县| 洪洞县| 施甸县| 嘉兴市| 景东| 舒城县| 封开县| 融水| 宣武区| 海伦市| 溆浦县| 阆中市|