io流分为字符流和字节流 然后下面又分为很多种
目前我见到的使用io流的情况有三种
- 第一种是读写txt文件
- 第二种是存储object和读取object 这种是存在dat文件里面的
- 第三种 有空回去看一看在写
存储和读取object
package dao;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import dto.Player;
public class DataDisk implements Data{
private static final String FILE_PATH = "save/record.dat";
@Override
public List<Player> loadData() {
ObjectInputStream ois = null;
List<Player> players = null;
try {
ois = new ObjectInputStream(new FileInputStream(FILE_PATH)); //划重点
players = (List<Player>)ois.readObject(); //划重点
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
ois.close(); //划重点
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return players;
}
@Override
public void saveData(List<Player> players) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(FILE_PATH)); //划重点
oos.writeObject(players); //划重点
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
oos.close(); //划重点
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args){
DataDisk dd = new DataDisk();
List<Player> players = new ArrayList<>();
players.add(new Player("A", 1000));
players.add(new Player("B", 2000));
players.add(new Player("C", 3000));
players.add(new Player("D", 4000));
dd.saveData(players);
System.out.println("保存完毕");
List<Player> dataFromDisk = dd.loadData();
for(Player p : dataFromDisk){
System.out.println(p.getName() + ":" + p.getPoint());
}
}
}
这段代码里面用到一个封装类Player 由于这个类是被读写的那个类 这个Player类必须implements一个叫做Serializable的接口
package dto;
import java.io.Serializable;
public class Player implements Comparable<Player>, Serializable{
private String name;
private int point;
public Player(String name, int point) {
super();
this.name = name;
this.point = point;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
@Override
public int compareTo(Player pla) {
// TODO Auto-generated method stub
return pla.point - this.point;
}