Java字节与字符流永久存储json数据
投稿: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的优点,方便于传输,较少冗余的字符,易于转换、阅读。