java存储字节_Java字节与字符流永久存储json数据

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值