这篇文章将为大家详细讲解有关Java字节与字符流永久存储json数据的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
使用第三方json转换工具
注意: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的优点,方便于传输,较少冗余的字符,易于转换、阅读。
关于“Java字节与字符流永久存储json数据的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。