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";
	}
}

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

转载于:https://my.oschina.net/cestbon/blog/71300

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值