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

 更新时间:2018年02月22日 14:36:22   投稿:laozhang  
本篇文章给大家详细讲述了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<User> 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<User> 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的优点,方便于传输,较少冗余的字符,易于转换、阅读。

相关文章

  • 详解Spring Boot整合Mybatis实现 Druid多数据源配置

    详解Spring Boot整合Mybatis实现 Druid多数据源配置

    本篇文章主要介绍了详解Spring Boot整合Mybatis实现 Druid多数据源配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 零基础写Java知乎爬虫之进阶篇

    零基础写Java知乎爬虫之进阶篇

    前面几篇文章,我们都是简单的实现了java爬虫抓取内容的问题,那么如果遇到复杂情况,我们还能继续那么做吗?答案当然是否定的,之前的仅仅是入门篇,都是些基础知识,给大家练手用的,本文我们就来点高大上的东西
    2014-11-11
  • 使用 Java 将 byte[] 转换为 File 对象并上传到外部服务器的方法(最新推荐)

    使用 Java 将 byte[] 转换为 File 对象并上

    本文展示了如何通过 Java 和 Spring 来处理图像文件的获取、保存和上传,通过 RestTemplate 获取字节数组并将其转换为 File 对象,可以轻松实现从远程 URL 获取文件并将其上传到外部服务器,感兴趣的朋友一起看看吧
    2025-03-03
  • Java实现SMS短信通发送手机验证码案例讲解

    Java实现SMS短信通发送手机验证码案例讲解

    这篇文章主要介绍了Java实现SMS短信通发送手机验证码案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 自定义注解+Spel实现分布式锁方式

    自定义注解+Spel实现分布式锁方式

    这篇文章主要介绍了自定义注解+Spel实现分布式锁方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot项目创建使用+配置文件+日志文件详解

    SpringBoot项目创建使用+配置文件+日志文件详解

    Spring的出现是为了简化 Java 程序开发,而 SpringBoot 的出现是为了简化 Spring 程序开发,这篇文章主要介绍了SpringBoot项目创建使用+配置文件+日志文件,需要的朋友可以参考下
    2023-02-02
  • idea配置多环境启动方式dev、test、prod

    idea配置多环境启动方式dev、test、prod

    这篇文章主要介绍了idea配置多环境启动方式dev、test、prod,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java实现批量导入excel表格数据到数据库中的方法

    Java实现批量导入excel表格数据到数据库中的方法

    这篇文章主要介绍了Java实现批量导入excel表格数据到数据库中的方法,结合实例形式详细分析了java导入Excel数据到数据库的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • 使用XSD校验Mybatis的SqlMapper配置文件的方法(2)

    使用XSD校验Mybatis的SqlMapper配置文件的方法(2)

    这篇文章主要介绍了使用XSD校验Mybatis的SqlMapper配置文件的方法(2)的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Springboot整合Activiti操作详解

    Springboot整合Activiti操作详解

    这篇文章主要给大家详细介绍了Springboot整合Activiti的操作流程,文中流程步骤和代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07

最新评论