首页 > 编程 > Java > 正文

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

2019-11-26 10:15:15
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表