欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-01-21 14:21:04
使用第三方json转换工具,阿里巴巴json转换工具fastjson1.2.7。 注意:jar包的导入不再赘述,详见百度。 user类,定义两种属性,并创建构造方法...

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

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