使用第三方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的优点,方便于传输,较少冗余的字符,易于转换、阅读。