栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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的优点,方便于传输,较少冗余的字符,易于转换、阅读。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/141612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号