json文件的读与写

本地JSON文件 的读与写

最近老师给我们一个日历让我们给日历添加记事本功能,推荐我们使用JSON文件,我之前从来没接触过JSON,在经过一系列摸爬滚打之后总算是取得了一些进展。
大致实现了
1.创建一个JSON对象
2.从本地JSON文件中读取对象
3.将创建的JSON对象存入内存

一:
其实很简单,就是用eclipse时要导入jar,因为之前从网上找各种方法,具体哪几个jar包有用我也不知道,导入方法是 右键点击要导入的工程->properties->Resource下面的javaBuildPath,然后点AddExternalJARs添加
在这里插入图片描述
通过下面的代码创建和向对象中添加对象

JSONObject json = new JSONObject();
		json.put("2020-11-29", "今天是2020年11月29日");
		json.put("2020-11-15", "今天是2020年11月15日");
		json.put("2020-11-19", "今天是2020年11月19日");
		json.put("2020-11-12", "今天是2020年11月12日");
		json.put("2020-11-22", "今天是2020年11月22日");

可以通过键对象获取对应的值对象

System.out.print(json.get("2020-11-19"));

二:
通过以下代码可以直接在JSON对象初始化时将本地文件赋值

File file = new File("C:\\Users\\Administrator\\Desktop\\test.json");
		String content= FileUtils.readFileToString(file,"utf-8");
		JSONObject json = new JSONObject(content);
		System.out.print(json.get("2020-11-16"));
		json.put("2020-11-29", "今天是2020年11月29日");
		System.out.print(json.get("2020-11-29"));
		System.out.print(json);

需要注意的是对JSON对象添加元素不会添加到本地文件中,所以我们需要第三个功能
在该代码中默认文件的编码格式是UTF-8,但实际情况并不是这样的,这时候我可以用Charset. defaultCharset()查看本机的默认编码,并进行对应的修改
三:
直接上代码

File file = new File("C:\\Users\\Administrator\\Desktop\\hhh1.json");
		if(!file.exists()) {
    
    
			file.createNewFile();
		}
		JSONObject json = new JSONObject();
		json.put("2020-11-29", "今天是2020年11月29日");
		json.put("2020-11-15", "今天是2020年11月15日");
		json.put("2020-11-19", "今天是2020年11月19日");
		json.put("2020-11-12", "今天是2020年11月12日");
		json.put("2020-11-22", "今天是2020年11月22日");
		System.out.print(json.get("2020-11-19"));
		String string = json.toString();
//		byte[] b =string.getBytes();
//		OutputStream os = new FileOutputStream(file);
//		os.write(b, 0, string.length());
//		os.close();
		FileWriter fw= new FileWriter(file);
		BufferedWriter bw= new BufferedWriter(fw);
		bw.write(string);
		bw.close();

这样在每次存入时都会覆盖之前的文件,但我们是先把文件赋值给对象,对对象进行修改后再存入,所以这不但不会对我们造成影响,还正好契合我们的需求。
如果需要之前的数据,可以修改一行代码

FileWriter fw= new FileWriter(file,true);
这样的话就变成追加了

猜你喜欢

转载自blog.csdn.net/m0_45972156/article/details/109746568