****使用的软件为intellij idea jdk为1.8
/**
* 电话卡数据访问 是一个父类
* 定义电话卡的 增 删 方法 不提供具体的实现
* Created by Administrator on 2017/5/22.
* 定义一个抽象类
*/
public abstract class CardDal {
public abstract void save(MobileCard card); //MobileCard为手机卡类型保存单个数据
public abstract void del(String cardNo); //删除一个
public abstract void saveAllCard(); //保存所有数据
public abstract Map<String, MobileCard> getAllCard(); //获取所有数据卡的信息
}
文件存储的子类代码
/**
* 文件保存MobileCard集合
* Created by Administrator on 2017/5/22.
*/
public class FileDal extends CardDal {
static final String savePath = "C:/MobileCareds"; //文件保存的路径
static final String saveFile = savePath + File.separator + "data.txt"; //保存格式
Map<String, MobileCard> sMap = new HashMap<>(); //以map集合的形式保存到txt文档
public void initPath() {
File f = new File(savePath);
File f1 = new File(saveFile);
if (!f1.exists()) {
f.mkdir();
try {
f1.createNewFile();
} catch (IOException e) {
}
}
}
/**
* 序列化对象后存储到文件中
*
* @param card
*/
@Override
public void save(MobileCard card) {
initPath();
sMap =getAllCard();
//序列化map并存储
sMap.put(card.cardNumber, card);
//用 java.io.ObjectOutputStream 写文件,文件中写字节序列
saveAllCard();
}
@Override
public void del(String cardNo) {
if(sMap.isEmpty()){
sMap = getAllCard();
}
//删除一个对象,重新保存map
sMap.remove(cardNo);
saveAllCard();
}
@Override
public Map<String, MobileCard> getAllCard() {
InputStream is = null;
try {
is = new FileInputStream(saveFile);
ObjectInputStream ois = new ObjectInputStream(is);
sMap = (Map<String, MobileCard>) ois.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
return sMap;
}
@Override
public void saveAllCard() {
initPath();
//用 java.io.ObjectOutputStream 写文件,文件中写字节序列
OutputStream os = null;
ObjectOutputStream oos = null;
try {
os = new FileOutputStream(saveFile, false);
oos = new ObjectOutputStream(os);
//card对象序列化后存储在文件中
//文件内容只有一个序列化的对象s
oos.writeObject(sMap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.flush();//只有output流需要flush
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
但是实体类必须要实现Serializable
public class MobileCard implements Serializable{
public String cardNumber;
public String userName;
public String passWord;
public ServicePackage serPackage; //套餐类型
public double money; //剩余金额
public double consumAmout; //消费金额
public int realTalkTime; // 语音时间
public int realSMSCount; //短信数量
public int realFlow; //流量数量
public void showMeg(){}
public class ServicePackage implements Serializable {
public double price; //套餐的费用
public void showInfo(){
}
完整代码地址 点击打开链接