Java字節(jié)與字符流永久存儲json數(shù)據
使用第三方json轉換工具,阿里巴巴json轉換工具Fastjson1.2.7。
http://www.dbjr.com.cn/softs/530842.html
注意:jar包的導入不再贅述,詳見百度。
User類,定義兩種屬性,并創(chuàng)建構造方法與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;
}
}
字節(jié)流的方式存儲json數(shù)據到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數(shù)據寫入完成");
}
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數(shù)據再轉為對象,并在控制臺輸出
list=JSON.parseArray(str.trim(),User.class); //讀取到的json數(shù)據存在空格,trim方法去除
for(User obj:list){
System.out.println(obj.getUserName()+"\t"+obj.getBalance());
}
}
}
字符流的方式存儲json數(shù)據到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數(shù)據寫入完成");
}
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數(shù)據再轉為對象,并在控制臺輸出
list=JSON.parseArray(str.trim(),User.class);
for(User obj:list){
System.out.println(obj.getUserName()+"\t"+obj.getBalance());
}
}
}
運行結果:
json數(shù)據寫入完成
[{"balance":100,"userName":"張三"},{"balance":200,"userName":"張四"},{"balance":300,"userName":"張五"}]
張三 100.0
張四 200.0
張五 300.0
問題:為什么需要把對象轉為json再存儲?為什么不直接把對象存儲到文件中?使用json有什么好處?
一二問回答:如果直接把對象寫入文件中,會產生亂碼,需要轉換json字符串再存儲。
三問回答:json的優(yōu)點,方便于傳輸,較少冗余的字符,易于轉換、閱讀。
相關文章
使用mybatis進行數(shù)據插入時返回自增id的方法及注意點
這篇文章主要給大家介紹了關于使用mybatis進行數(shù)據插入時返回自增id的方法及注意點,在插入一條數(shù)據之后需要返回它的自增主鍵id,因為插入的實體類數(shù)據id為空,后面的邏輯還需要這個id,需要的朋友可以參考下2023-09-09
springboot業(yè)務功能實戰(zhàn)之告別輪詢websocket的集成使用
WebSocket使得客戶端和服務器之間的數(shù)據交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據,下面這篇文章主要給大家介紹了關于springboot業(yè)務功能實戰(zhàn)之告別輪詢websocket的集成使用,需要的朋友可以參考下2022-10-10
SpringBoot Scheduling定時任務的示例代碼
springBoot提供了定時任務的支持,通過注解簡單快捷,對于日常定時任務可以使用。本文詳細的介紹一下使用,感興趣的可以了解一下2021-08-08
java開發(fā)只要tomcat設計模式用的好下班就能早
這篇文章主要為大家介紹了java開發(fā)只要tomcat設計模式的示例詳解,<BR>只要設計模式用的好下班就能早,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

