Java字节与字符流永久存储json数据
2018-02-22 14:36
621 查看
使用第三方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的优点,方便于传输,较少冗余的字符,易于转换、阅读。
您可能感兴趣的文章:
相关文章推荐
- Json树形结构数据转Java对象并存储到数据库的实现-超简单的JSON复杂数据处理 .
- Java的char数据类型存储一个中文字符
- Java 文件字节字符数据转换
- java 中JSON数据特殊字符的处理
- JavaScript localStorage 浏览器永久存储json 数据 并添加过期时间
- 【JavaWeb-6】HttpServletResponse的字符字节输出流、编码、文件下载、Captcha图片与HttpServletRequest获取request数据表单非表单数据、重定向与转发
- jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
- JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现
- java 中JSON数据特殊字符的处理
- 数据库存储为null时,自定义字符标识。使转为json数据后,列不丢失或有undefined。
- jQuery jqgrid 对含特殊字符 json 数据的 Java 处理方法
- JAVA基础初探(十三)IO简介、字节流与字符流区别、带缓冲的字节/字符流读取数据、FileReader/FileWriter便捷类、Apache IO库使用说明
- Json树形结构数据转Java对象并存储到数据库的实现-超简单的JSON复杂数据处理
- java 中JSON数据特殊字符的处理
- java解析json数据及java对象存储
- java中的数据存储,字节转换,位操作
- JAVA八种基本数据类型存储数值,字符和布尔值
- java 中JSON数据特殊字符的处理
- 【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集
- jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法