热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Java字节与字符流永久存储json数据

本篇文章给大家详细讲述了Java字节与字符流永久存储json数据的方法,以及代码分享,有兴趣的参考学习下。

使用第三方json转换工具,阿里巴巴json转换工具Fastjson1.2.7。

https://www.jb51.net/softs/530842.html

注意:jar包的导入不再赘述,详见百度。

User类,定义两种属性,并创建构造方法与get和set方法

public class User {
	public String userName; //名字
	public double balance; //金额
	public User() {
		super();
	}
	public User(String userName, double balance) {
		super();
		this.userName = userName;
		this.balance = balance;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}

字节流的方式存储json数据到txt文件

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

public class ListFile {
	public static void main(String[] args){
		List list=new ArrayList<>();
		list.add(new User("张三",100));
		list.add(new User("张四",200));
		list.add(new User("张五",300));
		File file=new File("D:/uselist.txt"); //存储的目标文件
		FileOutputStream fos=null;
		BufferedOutputStream bos=null;
		try{
			fos=new FileOutputStream(file);
			bos=new BufferedOutputStream(fos);
			String json=JSON.toJSONString(list); //对象转换为json
			bos.write(json.getBytes("utf-8")); //json字符串写入文件
			bos.flush();
			System.out.println("json数据写入完成");
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				fos.close();
				bos.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
		
		//读取文件内容,并在控制台输出
		String str="";
		int num=0;
		FileInputStream fis=null;
		BufferedInputStream bis=null;
		byte buff[]=new byte[1024];
		try{
			fis=new FileInputStream(file);
			bis=new BufferedInputStream(fis);
			while((num=bis.read(buff))!=-1){
				str+=new String(buff,"utf-8");
			}
			System.out.println(str); //打印读取文件的json字符串
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				fis.close();
				bis.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
		
		//把读取到的json数据再转为对象,并在控制台输出
		list=JSON.parseArray(str.trim(),User.class); //读取到的json数据存在空格,trim方法去除
		for(User obj:list){
			System.out.println(obj.getUserName()+"\t"+obj.getBalance());
		}
	}
}

字符流的方式存储json数据到txt文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

public class ListFile {
	public static void main(String[] args){
		List list=new ArrayList<>();
		list.add(new User("张三",100));
		list.add(new User("张四",200));
		list.add(new User("张五",300));
		File file=new File("D:/uselist.txt"); //存储的目标文件
		FileWriter fw=null;
		BufferedWriter bw=null;
		
		try{
			fw=new FileWriter(file);
			bw=new BufferedWriter(fw);
			String json=JSON.toJSONString(list); //对象转换为json
			bw.write(json); //json字符串写入文件
			bw.flush();
			System.out.println("json数据写入完成");
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				bw.close();
				fw.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
		
		//读取文件内容,并在控制台输出
		String str="";
		String s="";
		FileReader fr=null;
		BufferedReader br=null;
		try{
			fr=new FileReader(file);
			br=new BufferedReader(fr);
			while((s=br.readLine())!=null){
				str+=s;
			}
			System.out.println(str); //打印读取文件的json字符串
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				br.close();
				fr.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
		
		//把读取到的json数据再转为对象,并在控制台输出
		list=JSON.parseArray(str.trim(),User.class);
		for(User obj:list){
			System.out.println(obj.getUserName()+"\t"+obj.getBalance());
		}
	}
}

运行结果:

json数据写入完成
[{"balance":100,"userName":"张三"},{"balance":200,"userName":"张四"},{"balance":300,"userName":"张五"}]
张三	100.0
张四	200.0
张五	300.0

问题:为什么需要把对象转为json再存储?为什么不直接把对象存储到文件中?使用json有什么好处?

一二问回答:如果直接把对象写入文件中,会产生乱码,需要转换json字符串再存储。

三问回答:json的优点,方便于传输,较少冗余的字符,易于转换、阅读。


推荐阅读
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了Svn和Maven的使用说明,包括版本控制和构建工具的功能和优势。同时提供了一个相关链接,链接中详细介绍了SvnMaven的使用方法和注意事项。通过学习和使用SvnMaven,开发人员可以更好地进行代码管理、软件开发和协作开发,提高项目管理的效率和质量。 ... [详细]
author-avatar
枫的Lilyxj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有