使用第三方json轉換工具,阿里巴巴json轉換工具Fastjson1.2.7。
//www.VeVB.COm/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); //對象轉換為jsonbos.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); //對象轉換為jsonbw.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的優點,方便於傳輸,較少冗餘的字符,易於轉換、閱讀。