Java字节与字符流永久存储json数据
作者:laozhang 发布时间:2022-12-27 21:10:13
标签:Java,字节,字符流,json数据
使用第三方json转换工具,阿里巴巴json转换工具Fastjson1.2.7。
https://www.jb51.net/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); //对象转换为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的优点,方便于传输,较少冗余的字符,易于转换、阅读。
来源:https://www.idaobin.com/archives/894.html


猜你喜欢
- 在编写类的时候可以使用两种方式定义类:public class定义类:class定义类:如果一个类声明的时候使用了public class进
- Java程序设计 图形用户界面 【九】单选按钮单选按钮 JRadioButtonJRadioButton类方法作用public JRadio
- 今天朋友圈又火了,听说原因是 @腾讯官网 就能得到一顶绿色的帽子,啊呸,是一个好看的国庆节头像,可是听说没一会就502了,那么我们自己动手实
- 1. Limit实现分页1.1 为什么需要分页 减少数据的处理量1.2 使用Limit实现分页select * from user limi
- 使用Postman传递arraylist数据给springboot起因:需要做一个批量删除的功能,后台接收一个ArrayList ids 。
- 对于服务器端开发人员而言,调用第三方接口获取数据,将其“代理”转化并返给客户端几乎是家常便
- 问题在使用 Abp 框架的后台作业时,当后台作业抛出异常,会导致整个程序崩溃。在 Abp 框架的底层执行后台作业的时候,有 try/catc
- 来自同事_Smile的封装应用,记录学习一下,分享给大家,具体如下:1、AnimImageViewLoader类的封装/** * 适用于an
- 本文实例为大家分享了java二维码的实现代码,供大家参考,具体内容如下这次用到的jar包是zxing,没有用到core的jar包先导入zxi
- MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoD
- Java 数据库连接池详解数据库连接池的原理是:连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库
- Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无
- 1. 实现效果1.1 controller最终实现效果,在接口上标记上 @Router 注解用来标记当前接口需要根据参数中的某个字段进行数据
- 开篇点题:正则表达式方法效果=0(下面会提到效果)空行问题: VS:在使用过程中对于VS的自动整理不太满意,因为不会自动删除空行当出现这种情
- 下面是20个非常有用的Java程序片段,希望能对你有用。1. 字符串有整型的相互转换String a = String.valueOf(2)
- 一、整合原理二、导包(41个)1.hibernate(1)hibernate/lib/required(2)hibernate/lib/jp
- 本文介绍SpringBoot如何使用Prometheus配合Grafana监控。1.关于PrometheusPrometheus是一个根据应
- MainActivity如下:package cc.ab;import android.os.Bundle;import android.p
- Authentication使用SpringSecurity可以在任何地方注入Authentication进而获取到当前登录的用户信息,可谓
- 一、首先下载 ZXing.Net地址是:http://zxingnet.codeplex.com/releases/view/117068然