Java字节与字符流永久存储json数据
程序员文章站
2022-05-03 10:22:41
使用第三方json转换工具,阿里巴巴json转换工具fastjson1.2.7。
注意:jar包的导入不再赘述,详见百度。
user类,定义两种属性,并创建构造方法...
使用第三方json转换工具,阿里巴巴json转换工具fastjson1.2.7。
注意: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的优点,方便于传输,较少冗余的字符,易于转换、阅读。