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

java存储字节_Java字节与字符流永久存储json数据相关推荐

  1. java精选面试题---字节流和字符流的区别

    字节流和字符流的区别 字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节 数是两个,在 UTF-8 码表中是 3 个字节)时.先去查指定的编码表,将查 ...

  2. java 字符流图片_java 字节流、字符流(复制图片、复制文本)

    1.File 1)构造方法 2)创建 3)判断.获取 4)删除 2.字节流 1)字节流写数据的3种方式 FileOutputStream fos = new FileOutputStream(&quo ...

  3. java字符的输入流_Java:字节流和字符流(输入流和输出流)

    InputStream是抽象基类,所以它不可以创建对象,但它可以用来"接口化编程",因为大部分子类的函数基类都有定义,所以利用基类来调用函数. FileInputStream是用来 ...

  4. java中什么是字节流和字符流_java中字节流与字符流的区别是什么

    字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...

  5. java 字节流设置编码方式_java字节流和字符流编码格式(转自姚刚)

    /** * 字节流和字符流的区别, * (1)字符流带有缓冲,必须flush或close后数据才会从缓存中写入磁盘文件. * 字节流直接写文件. * (2)字符流在创建流的时候,指定编码,字节流在文件 ...

  6. Java——I/O(字节流、字符流与转换流 )

    目录 字节流和字符流 1. 流操作流程 2. 字节输出流(OutputStream) 2.1 输出方法 3. 自动关闭支持AutoCloseable-JDK1.7 4. 字节输入流(InputSrea ...

  7. java有道_java中的各种流(老师的有道云笔记)

    内存操作流-字节 之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内存操作流.此时得使用内存流完成内存的输入和输出操作. 如果程序运行过程中要产生一些临时文件,可采用虚拟文 ...

  8. hkt java 怎么转换_Java基础教程——转换流

    转换流 通常,Window默认的编码方式是GBK,Java项目一般建议设为UTF-8编码.这时候读取文件可能出现乱码.事实上实际应用中编码格式不匹配的场景非常多. 转换流可以指定编码方式,用于解决乱码 ...

  9. Java学习笔记29(IO字符流,转换流)

    字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件 字符输出流:Write类,使用时通过子类   每一次写入都要刷新 pac ...

最新文章

  1. 环形链表找入口,真的太妙了
  2. MySQL多实例学习笔记
  3. STM32 基础系列教程 3 – 外部中断
  4. python app服务器_Python应用02 Python服务器进化
  5. 数据分析中的两种偏差
  6. VS2010常用快捷键自定义
  7. python手机编译器可以干什么_世界上最好的Python编辑器是什么?
  8. 什么是php渲染,php数据渲染输出
  9. MySQL懒查询_mysql 联查的基本命令
  10. 模拟 Vue 手写一个 MVVM
  11. HCIE Security GRE和L2TP 备考笔记(幕布)
  12. 笨办法学R编程(4)
  13. RocketMQ(十六)RocketMQ消息存储机制
  14. spss分析方法-判别分析
  15. dorado 7 注意总结
  16. 车牌识别系统原理及代码【YOLO+MLP】
  17. Apache Pulsar 生态项目 AoP 新增两位中国移动 Maintainer!
  18. python 强大的错误重试库 tenacity retry
  19. 关键链法vs关键路径法
  20. Dynamips和Vmware完成CCVP试验(3)

热门文章

  1. ThreadPoolExecutor中addWorker,continue retry和break retry是什么意思
  2. carsim2020.0的教程在“将HDWDZDPPV6 替换成 复制的HostID”这个步骤总是安装失败,解决这个问题,成功安装carsim2020.0的经验
  3. 新的深度学习优化器Ranger: RAdam + LookAhead的协同组合,两者兼得。
  4. 参考文献格式生成器(GB/T 7714-2015)
  5. 设备扩展(DEVICE_EXTENSION)
  6. 一个保护眼睛的小技巧
  7. 如何制作一个简单的16位CPU
  8. 335x系列平台-ADC接口配置和最大采样速率
  9. TCP扫描增强器实现65000端口,10S完成,快准狠(Go语言编程)
  10. python网络爬虫技术课后答案_尔雅《Python网络爬虫技术(2020年秋季学期)》网课答案...