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
0
投稿
猜你喜欢
- 需求描述:企业开发过程中,经常需要将一些静态文本数据放到Resources目录下,项目启动时或者程序运行
- 表述在一次服务更新后发现每天凌晨0点3秒服务准时挂,开始的时候认为是maven依赖中存在system.exit(3)类似这样的代码,但是我想
- springboot整合mybatis实现数据库更新批处理1.在mapper接口中编写方法/** * 修改book表中的销量和库存
- 1.问题产生情况我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_gene
- 这篇文章主要介绍了如何通过SpringBoot实现商城秒杀系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 1.前言在Mybatis中需要创建的配置文件有sqlMapconfig.xml,映射文件xxxMapper.xml,而这些文件在idea中并
- 前言在上一篇文章中,我们分析了Spring中Bean的实例化过程,在结尾我们知道了虽然bean的实例化完成了,但是其中的属性还没有被注入,今
- 因为系统的菜单列表是不轻易改变的,所以不需要在每次请求的时候都去查询数据库,所以,在第一次根据用户id请求到菜单列表的时候,可以把菜单列表的
- 概述在移动应用开发中,消息推送可以说是一项非常重要的功能,它能够起到提醒或者唤醒用户的作用,同时也是产品运营人员更高效地实现运营目标的重要手
- 本文实例为大家分享了Java解码H264格式视频流中的图片,供大家参考,具体内容如下引入依赖<dependency>  
- 1. pom.xml文件配置<?xml version="1.0" encoding="UTF-8&qu
- Java HashSetHashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。
- Springboot自带定时任务实现动态配置Cron参数同学们,我今天分享一下SpringBoot动态配置Cron参数。场景是这样子的:后台
- 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方
- 后台控制层: public static final String HEAD_IMG_DIR = "D:/upload/&quo
- 自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以
- 一、简单介绍翻看Spring的源码时,发现@Bean注解的源码上标注了Since: 3.0,也就是说,@Bean注解是Spring从3.0版
- 在讲述这个模式之前,我们先看一个案例:游戏回档游戏的某个场景,一游戏角色有生命力、攻击力、防御力等数据,在打Boss前和后会不一样,我们允许
- 需要用到 java 写一个 ftp 的工具,因为只有一点点 java 基础,但是由于好几年不用,几乎算是不会了,只好一点点来搞,还好能捡起来
- 在javaweb中写了一个图片的链接,可以打开预览,另外提供一个下载功能。以下是预览代码,没什么好说的;href若连接的是一个压缩包文件之类