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的优点,方便于传输,较少冗余的字符,易于转换、阅读。
java存储字节_Java字节与字符流永久存储json数据相关推荐
- java精选面试题---字节流和字符流的区别
字节流和字符流的区别 字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节 数是两个,在 UTF-8 码表中是 3 个字节)时.先去查指定的编码表,将查 ...
- java 字符流图片_java 字节流、字符流(复制图片、复制文本)
1.File 1)构造方法 2)创建 3)判断.获取 4)删除 2.字节流 1)字节流写数据的3种方式 FileOutputStream fos = new FileOutputStream(&quo ...
- java字符的输入流_Java:字节流和字符流(输入流和输出流)
InputStream是抽象基类,所以它不可以创建对象,但它可以用来"接口化编程",因为大部分子类的函数基类都有定义,所以利用基类来调用函数. FileInputStream是用来 ...
- java中什么是字节流和字符流_java中字节流与字符流的区别是什么
字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...
- java 字节流设置编码方式_java字节流和字符流编码格式(转自姚刚)
/** * 字节流和字符流的区别, * (1)字符流带有缓冲,必须flush或close后数据才会从缓存中写入磁盘文件. * 字节流直接写文件. * (2)字符流在创建流的时候,指定编码,字节流在文件 ...
- Java——I/O(字节流、字符流与转换流 )
目录 字节流和字符流 1. 流操作流程 2. 字节输出流(OutputStream) 2.1 输出方法 3. 自动关闭支持AutoCloseable-JDK1.7 4. 字节输入流(InputSrea ...
- java有道_java中的各种流(老师的有道云笔记)
内存操作流-字节 之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内存操作流.此时得使用内存流完成内存的输入和输出操作. 如果程序运行过程中要产生一些临时文件,可采用虚拟文 ...
- hkt java 怎么转换_Java基础教程——转换流
转换流 通常,Window默认的编码方式是GBK,Java项目一般建议设为UTF-8编码.这时候读取文件可能出现乱码.事实上实际应用中编码格式不匹配的场景非常多. 转换流可以指定编码方式,用于解决乱码 ...
- Java学习笔记29(IO字符流,转换流)
字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件 字符输出流:Write类,使用时通过子类 每一次写入都要刷新 pac ...
最新文章
- 环形链表找入口,真的太妙了
- MySQL多实例学习笔记
- STM32 基础系列教程 3 – 外部中断
- python app服务器_Python应用02 Python服务器进化
- 数据分析中的两种偏差
- VS2010常用快捷键自定义
- python手机编译器可以干什么_世界上最好的Python编辑器是什么?
- 什么是php渲染,php数据渲染输出
- MySQL懒查询_mysql 联查的基本命令
- 模拟 Vue 手写一个 MVVM
- HCIE Security GRE和L2TP 备考笔记(幕布)
- 笨办法学R编程(4)
- RocketMQ(十六)RocketMQ消息存储机制
- spss分析方法-判别分析
- dorado 7 注意总结
- 车牌识别系统原理及代码【YOLO+MLP】
- Apache Pulsar 生态项目 AoP 新增两位中国移动 Maintainer!
- python 强大的错误重试库 tenacity retry
- 关键链法vs关键路径法
- Dynamips和Vmware完成CCVP试验(3)
热门文章
- ThreadPoolExecutor中addWorker,continue retry和break retry是什么意思
- carsim2020.0的教程在“将HDWDZDPPV6 替换成 复制的HostID”这个步骤总是安装失败,解决这个问题,成功安装carsim2020.0的经验
- 新的深度学习优化器Ranger: RAdam + LookAhead的协同组合,两者兼得。
- 参考文献格式生成器(GB/T 7714-2015)
- 设备扩展(DEVICE_EXTENSION)
- 一个保护眼睛的小技巧
- 如何制作一个简单的16位CPU
- 335x系列平台-ADC接口配置和最大采样速率
- TCP扫描增强器实现65000端口,10S完成,快准狠(Go语言编程)
- python网络爬虫技术课后答案_尔雅《Python网络爬虫技术(2020年秋季学期)》网课答案...