Java字節(jié)與字符流永久存儲json數(shù)據(jù)
使用第三方j(luò)son轉(zhuǎn)換工具,阿里巴巴json轉(zhuǎn)換工具Fastjson1.2.7。
http://www.fzitv.net/softs/530842.html
注意:jar包的導(dǎo)入不再贅述,詳見百度。
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é)流的方式存儲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"); //存儲的目標(biāo)文件
FileOutputStream fos=null;
BufferedOutputStream bos=null;
try{
fos=new FileOutputStream(file);
bos=new BufferedOutputStream(fos);
String json=JSON.toJSONString(list); //對象轉(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)容,并在控制臺輸出
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)為對象,并在控制臺輸出
list=JSON.parseArray(str.trim(),User.class); //讀取到的json數(shù)據(jù)存在空格,trim方法去除
for(User obj:list){
System.out.println(obj.getUserName()+"\t"+obj.getBalance());
}
}
}
字符流的方式存儲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"); //存儲的目標(biāo)文件
FileWriter fw=null;
BufferedWriter bw=null;
try{
fw=new FileWriter(file);
bw=new BufferedWriter(fw);
String json=JSON.toJSONString(list); //對象轉(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)容,并在控制臺輸出
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)為對象,并在控制臺輸出
list=JSON.parseArray(str.trim(),User.class);
for(User obj:list){
System.out.println(obj.getUserName()+"\t"+obj.getBalance());
}
}
}
運行結(jié)果:
json數(shù)據(jù)寫入完成
[{"balance":100,"userName":"張三"},{"balance":200,"userName":"張四"},{"balance":300,"userName":"張五"}]
張三 100.0
張四 200.0
張五 300.0
問題:為什么需要把對象轉(zhuǎn)為json再存儲?為什么不直接把對象存儲到文件中?使用json有什么好處?
一二問回答:如果直接把對象寫入文件中,會產(chǎn)生亂碼,需要轉(zhuǎn)換json字符串再存儲。
三問回答:json的優(yōu)點,方便于傳輸,較少冗余的字符,易于轉(zhuǎn)換、閱讀。
- 淺談Java中的集合存儲數(shù)據(jù)后,輸出數(shù)據(jù)的有序和無序問題
- Java 實現(xiàn)Redis存儲復(fù)雜json格式數(shù)據(jù)并返回給前端
- java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲詳解
- 淺談java 數(shù)據(jù)處理(int[][]存儲與讀取)
- 相冊管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫存儲)
- JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對象并存儲到數(shù)據(jù)庫的實現(xiàn)
- java實現(xiàn)表格數(shù)據(jù)的存儲
相關(guān)文章
詳解Spring Boot整合Mybatis實現(xiàn) Druid多數(shù)據(jù)源配置
本篇文章主要介紹了詳解Spring Boot整合Mybatis實現(xiàn) Druid多數(shù)據(jù)源配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
使用 Java 將 byte[] 轉(zhuǎn)換為 File 對象并上
本文展示了如何通過 Java 和 Spring 來處理圖像文件的獲取、保存和上傳,通過 RestTemplate 獲取字節(jié)數(shù)組并將其轉(zhuǎn)換為 File 對象,可以輕松實現(xiàn)從遠(yuǎn)程 URL 獲取文件并將其上傳到外部服務(wù)器,感興趣的朋友一起看看吧2025-03-03
Java實現(xiàn)SMS短信通發(fā)送手機(jī)驗證碼案例講解
這篇文章主要介紹了Java實現(xiàn)SMS短信通發(fā)送手機(jī)驗證碼案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
SpringBoot項目創(chuàng)建使用+配置文件+日志文件詳解
Spring的出現(xiàn)是為了簡化 Java 程序開發(fā),而 SpringBoot 的出現(xiàn)是為了簡化 Spring 程序開發(fā),這篇文章主要介紹了SpringBoot項目創(chuàng)建使用+配置文件+日志文件,需要的朋友可以參考下2023-02-02
idea配置多環(huán)境啟動方式dev、test、prod
這篇文章主要介紹了idea配置多環(huán)境啟動方式dev、test、prod,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Java實現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法
這篇文章主要介紹了Java實現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法,結(jié)合實例形式詳細(xì)分析了java導(dǎo)入Excel數(shù)據(jù)到數(shù)據(jù)庫的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)
這篇文章主要介紹了使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-11-11

