Java 读写json格式的文件方法详解

openkk 10年前

一、要解决这个问题首先要知道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";   }  }

此文章取材红黑联盟,完善了下代码。