您的位置:首页 > 编程语言 > Java开发

json学习六——>Java 读写json格式的文件方法详解

2014-08-18 17:24 781 查看
一、要解决这个问题首先要知道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格式的文件,存的就是他的信息,如下

Sets.json:

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

3.具体操作.

/*

* 取出文件内容,填充对象

*/

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里调用的)

//取出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";

if(businessService.ChangeElectSets(filePath, changes)){

log.info("选课设置修改成功");

request.setCharacterEncoding("UTF-8");

response.setContentType("text/json;charset=utf-8");

response.getWriter().write("{success: true}");

} else {

response.getWriter().write("{errors:'选课设置修改失败,请重新尝试!'}");

}

}

摘自红色黑客联盟(www.7747.net) 原文:http://www.7747.net/kf/201009/74381.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: