📄 filedao.java
字号:
package anni.gbook;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import anni.tools.FileSystem;
/**
* 实现了IBoardDAO接口的类.
* 注意这东西是个Singleton,不过方法都没有考虑同步
* 因为没有经验,也不知道该怎么改
* 与其现在考虑又想不出来,不如先记下来,以后有问题再改好了
*
* @author Lingo
* @version 1.0
* @since 2006-01-01 18:52
*/
public final class FileDAO implements IBoardDAO {
/**
* singleton中保存的是实例.
*/
private static FileDAO instance = new FileDAO("data.txt");
/**
* 实际上使用FileSystem来操作数据.
* FileDAO的作用只是进行数据封装
*/
private FileSystem system;
/**
* 构造方法,指定一个保存数据的文件.
* 因为使用的是相对变量,到底在哪里就不清楚了
* @since 2006-01-01 18:53
* @author Lingo
* @param fileName 操作的文件名
*/
private FileDAO(final String fileName) {
system = new FileSystem(fileName);
}
/**
* 取得这个Singleton的方法.
* @since 2006-01-01 18:54
* @author Lingo
* @return FileDAO 实例
*/
public static FileDAO getInstance() {
return instance;
}
/**
* 查找所有记录.
* @return List 保存所有记录的列表
*/
public List findAll() {
List tmp;
List all = new ArrayList();
try {
tmp = system.findAll();
BoardInfo info;
List item;
//这里要把得到的列表反转
//这样最新的留言就到了最前面了
int len = tmp.size();
for (int i = len - 1; i >= 0; i--) {
item = (List) tmp.get(i);
info = list2Bean(item);
all.add(info);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return all;
}
/**
* 从List转换到Bean.
* @param list 原始保存数据的List
* @return BoardInfo 转换成的Bean,如果List为null就返回null
*/
private BoardInfo list2Bean(final List list) {
if (list != null) {
BoardInfo bean = new BoardInfo();
bean.setId(Integer.parseInt((String) list.get(0)));
bean.setName((String) list.get(1));
bean.setEmail((String) list.get(2));
bean.setPageName((String) list.get(3));
bean.setPageUrl((String) list.get(4));
bean.setSex(Integer.parseInt((String) list.get(5)));
bean.setImg((String) list.get(6));
bean.setContent((String) list.get(7));
bean.setIp((String) list.get(8));
bean.setDateTime(new Date(Long.parseLong((String) list.get(9))));
bean.setReply((String) list.get(10));
return bean;
} else {
return null;
}
}
/**
* 新添加的方法,根据id返回一个BoardInfo.
* 如果找不到,就返回null
* @since 2006-01-02 22:07
* @author Lingo
* @param id id
* @return BoardInfo 找到的pojo
*/
public BoardInfo findById(final int id) {
List item;
BoardInfo info = null;
try {
item = system.findById(id);
if (item == null) {
return null;
}
info = list2Bean(item);
} catch (Exception ex) {
return null;
}
return info;
}
/**
* 插入一条记录.
* @param info 保存记录的pojo
*/
public void insert(final BoardInfo info) {
try {
List list = bean2List(info);
system.insert(list);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 从bean转换成List.
* @param bean 原始的bean
* @return List 转换后的List
*/
private List bean2List(final BoardInfo bean) {
if (bean != null) {
List list = new ArrayList();
//list.add(String.valueOf(bean.getId()));
list.add(bean.getName());
list.add(bean.getEmail());
list.add(bean.getPageName());
list.add(bean.getPageUrl());
list.add(String.valueOf(bean.getSex()));
list.add(bean.getImg());
list.add(bean.getContent());
list.add(bean.getIp());
list.add(String.valueOf(bean.getDateTime().getTime()));
list.add(bean.getReply());
return list;
} else {
return null;
}
}
/**
* 修改info的信息.
* 现在虽然只是用于修改回复信息,
* 就是只对最后一列数据进行修改,
* 不过还是做成可以对所有数据进行修改的样子
* 毕竟这样更像orm的样子
* @author Lingo
* @since 2006-01-02 23:26
* @param info 需要修改的信息,不能修改id
*/
public void update(final BoardInfo info) {
try {
List list = bean2List(info);
system.update(list);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 根据id删除记录.
* @param id id
*/
public void delete(final int id) {
try {
system.delete(id);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -