在数据层中我们只用接口,而功能是在它的实现类中实现的。因此我们改了数据层,对应调用数据层的逻辑层我们也要改过。
改进后的数据层是一个接口:如代码所示:
package cn.hncu.dao;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public interface addressDao {
public Object[] read(String fileName);
public boolean write(String fileName,Object[] objs);
}
而真正的实现方法在它的实现类:
package cn.hncu.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;
public class addReadAndWriteDao implements addressDao{
@Override
public Object[] read(String fileName) {
ArrayList<Object> list=new ArrayList<Object>();
ObjectInputStream in=null;
try {
in=new ObjectInputStream(new FileInputStream(fileName));
while(true){
list.add(in.readObject());
}
} catch (Exception e) {
}finally{
try {
if(in!=null){
in.close();
}
} catch (IOException e) {
throw new RuntimeException("关流失败");
}
}
Object objs[]=list.toArray();
if(objs==null){
return objs=new Object[0];
}
return objs;
}
@Override
public boolean write(String fileName, Object[] objs) {
ObjectOutputStream out=null;
try {
out=new ObjectOutputStream(new FileOutputStream(fileName));
for(Object obj:objs){
out.writeObject(obj);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}finally{
try {
if(out!=null){
out.close();
}
} catch (IOException e) {
throw new RuntimeException("关流失败");
}
}
return true;
}
}
对应位置的逻辑层也做了更改,用/*改动版*/标示。
package cn.hncu.busines;
import java.util.TreeMap;
import javax.swing.JOptionPane;
import cn.hncu.dao.addReadAndWriteDao;
import cn.hncu.dao.addressDao;
public class Myset {
//1
private final String FILE_NAME="a.date";
private static Object objs[]=new Object[0] ;
public boolean add(Object obj){
if(contains(obj)){
return false;
}
Object temp[]=new Object[objs.length+1];
System.arraycopy(objs, 0, temp, 0, objs.length);
temp[objs.length]=obj;
objs=temp;
temp=null;
//2
return save();
}
public Object[] getAll(){
//3
// objs=addressDao.read(FILE_NAME);
/*改动版*/
addressDao dao=new addReadAndWriteDao();
objs=dao.read(FILE_NAME);
return objs;
}
public boolean contains(Object obj){
for(Object temp:objs){//obj就是DumpCase对象
if(temp.equals(obj)){
return true;
}
}
return false;
}
public int size(){
return objs.length;
}
public boolean delete(Object obj){
if(!contains(obj)){
return false;
}
Object[] temps=new Object[objs.length-1];
int k=0;
for(int i=0;i<objs.length;i++){
if(!objs[i].equals(obj)){
temps[k++]=objs[i];
}
}
objs=temps;
//4
return save();
}
public boolean update(Object newObj , Object oldObj){
for(int i=0;i<objs.length;i++){
if(objs[i].equals(oldObj)){
objs[i]=newObj;
//5
return save();
}
}
return false;
}
public Object[] query(String name,String age,String address){
Object[] temps=new Object[objs.length];
int k=0;
for (int i = 0; i < objs.length; i++) {
String strObj=(String) objs[i];
String strs[]=strObj.split(",");
if(name!=null&&name.trim().length()>0){
if(!strs[0].contains(name)){
continue;
}
}
if(age!=null&&age.trim().length()>0){
if(!strs[1].equals(age)){
continue;
}
}
if(address!=null&&address.trim().length()>0){
if(!strs[2].contains(address)){
continue;
}
}
temps[k++]=objs[i];
}
Object temps2[]=new Object[k];
System.arraycopy(temps, 0, temps2, 0, k);
return temps2;
}
//6
public boolean save(){
addressDao dao=new addReadAndWriteDao();
boolean result2=dao.write(FILE_NAME, objs);
/*改动版*/
// boolean result=addressDao.write(FILE_NAME,objs);
if(result2==false){
JOptionPane.showMessageDialog(null, "存儲失敗");
return false;
}
return true;
}
}