Java字節(jié)與字符流永久存儲(chǔ)json數(shù)據(jù)
使用第三方j(luò)son轉(zhuǎn)換工具,阿里巴巴json轉(zhuǎn)換工具Fastjson1.2.7。
http://www.dbjr.com.cn/softs/530842.html
注意:jar包的導(dǎo)入不再贅述,詳見(jiàn)百度。
User類,定義兩種屬性,并創(chuàng)建構(gòu)造方法與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; } }
字節(jié)流的方式存儲(chǔ)json數(shù)據(jù)到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"); //存儲(chǔ)的目標(biāo)文件 FileOutputStream fos=null; BufferedOutputStream bos=null; try{ fos=new FileOutputStream(file); bos=new BufferedOutputStream(fos); String json=JSON.toJSONString(list); //對(duì)象轉(zhuǎn)換為json bos.write(json.getBytes("utf-8")); //json字符串寫入文件 bos.flush(); System.out.println("json數(shù)據(jù)寫入完成"); } catch(Exception e){ e.printStackTrace(); } finally{ try{ fos.close(); bos.close(); } catch(Exception e){ e.printStackTrace(); } } //讀取文件內(nèi)容,并在控制臺(tái)輸出 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數(shù)據(jù)再轉(zhuǎn)為對(duì)象,并在控制臺(tái)輸出 list=JSON.parseArray(str.trim(),User.class); //讀取到的json數(shù)據(jù)存在空格,trim方法去除 for(User obj:list){ System.out.println(obj.getUserName()+"\t"+obj.getBalance()); } } }
字符流的方式存儲(chǔ)json數(shù)據(jù)到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"); //存儲(chǔ)的目標(biāo)文件 FileWriter fw=null; BufferedWriter bw=null; try{ fw=new FileWriter(file); bw=new BufferedWriter(fw); String json=JSON.toJSONString(list); //對(duì)象轉(zhuǎn)換為json bw.write(json); //json字符串寫入文件 bw.flush(); System.out.println("json數(shù)據(jù)寫入完成"); } catch(Exception e){ e.printStackTrace(); } finally{ try{ bw.close(); fw.close(); } catch(Exception e){ e.printStackTrace(); } } //讀取文件內(nèi)容,并在控制臺(tái)輸出 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數(shù)據(jù)再轉(zhuǎn)為對(duì)象,并在控制臺(tái)輸出 list=JSON.parseArray(str.trim(),User.class); for(User obj:list){ System.out.println(obj.getUserName()+"\t"+obj.getBalance()); } } }
運(yùn)行結(jié)果:
json數(shù)據(jù)寫入完成 [{"balance":100,"userName":"張三"},{"balance":200,"userName":"張四"},{"balance":300,"userName":"張五"}] 張三 100.0 張四 200.0 張五 300.0
問(wèn)題:為什么需要把對(duì)象轉(zhuǎn)為json再存儲(chǔ)?為什么不直接把對(duì)象存儲(chǔ)到文件中?使用json有什么好處?
一二問(wèn)回答:如果直接把對(duì)象寫入文件中,會(huì)產(chǎn)生亂碼,需要轉(zhuǎn)換json字符串再存儲(chǔ)。
三問(wèn)回答:json的優(yōu)點(diǎn),方便于傳輸,較少冗余的字符,易于轉(zhuǎn)換、閱讀。
- 淺談Java中的集合存儲(chǔ)數(shù)據(jù)后,輸出數(shù)據(jù)的有序和無(wú)序問(wèn)題
- Java 實(shí)現(xiàn)Redis存儲(chǔ)復(fù)雜json格式數(shù)據(jù)并返回給前端
- java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)詳解
- 淺談java 數(shù)據(jù)處理(int[][]存儲(chǔ)與讀取)
- 相冊(cè)管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫(kù)存儲(chǔ))
- JSON復(fù)雜數(shù)據(jù)處理之Json樹(shù)形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
- java實(shí)現(xiàn)表格數(shù)據(jù)的存儲(chǔ)
相關(guān)文章
Kotlin開(kāi)發(fā)Android應(yīng)用實(shí)例詳解
這篇文章主要介紹了Kotlin開(kāi)發(fā)Android應(yīng)用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn)
這篇文章主要給大家介紹了關(guān)于使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn),在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因?yàn)椴迦氲膶?shí)體類數(shù)據(jù)id為空,后面的邏輯還需要這個(gè)id,需要的朋友可以參考下2023-09-09java微信掃描公眾號(hào)二維碼實(shí)現(xiàn)登陸功能
這篇文章主要為大家詳細(xì)介紹了PHP微信掃描公眾號(hào)二維碼實(shí)現(xiàn)登陸功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07springboot業(yè)務(wù)功能實(shí)戰(zhàn)之告別輪詢websocket的集成使用
WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot業(yè)務(wù)功能實(shí)戰(zhàn)之告別輪詢websocket的集成使用,需要的朋友可以參考下2022-10-10SpringBoot Scheduling定時(shí)任務(wù)的示例代碼
springBoot提供了定時(shí)任務(wù)的支持,通過(guò)注解簡(jiǎn)單快捷,對(duì)于日常定時(shí)任務(wù)可以使用。本文詳細(xì)的介紹一下使用,感興趣的可以了解一下2021-08-08解決外部jar包@Service無(wú)法注解無(wú)法掃描的問(wèn)題
這篇文章主要介紹了解決外部jar包@Service無(wú)法注解無(wú)法掃描的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10java開(kāi)發(fā)只要tomcat設(shè)計(jì)模式用的好下班就能早
這篇文章主要為大家介紹了java開(kāi)發(fā)只要tomcat設(shè)計(jì)模式的示例詳解,<BR>只要設(shè)計(jì)模式用的好下班就能早,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02java實(shí)現(xiàn)24點(diǎn)紙牌游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)24點(diǎn)紙牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03