数据导入/导出功能的实现
注意:大家首先要读懂以下说明的实现方法,然后再根据自己题目的要求,进行相应的修改。
1、将需要导入/导出的数据对象(实体类)系列化,如
class User implements Serializable{}
参考修改如下(Role与User类,因为User类的属性中含有Role对象)
(1)Role.java
public class Role implements Serializable{
。。。。
public void writeObject(ObjectOutputStream out){
try{
out.writeInt(id);
out.writeUTF(roleName);
}
catch(Exception e){
e.printStackTrace();
}
}
public void readObject(ObjectInputStream in){
try{
id = in.readInt();
roleName = in.readUTF();
}
catch(Exception e){
e.printStackTrace();
}
}
}
(2)User.java
public class User implements Serializable{
。。。
public void writeObject(ObjectOutputStream out){
try{
out.writeInt(id);
out.writeUTF(nickname);
out.writeUTF(name);
out.writeUTF(password);
out.writeUTF(email);
out.writeInt(deptId);
out.writeObject(role);
}
catch(Exception e){
e.printStackTrace();
}
}
public void readObject(ObjectInputStream in){
try{
id = in.readInt();
nickname = in.readUTF();
name = in.readUTF();
password = in.readUTF();
email = in.readUTF();
deptId = in.readInt();
role = (Role)in.readObject();
}
catch(Exception e){
e.printStackTrace();
}
}
}
2、在数据访问对象中,添加新的访问方法,实现批量数据的读写,如:
(1)在IUserDao.java中添加接口方法:
public interface IUserDao extends IBaseDao
。。。。
public abstract void insert(List
}
(2)修改UserDaoImpl,实现上述接口方法:
public class UserDaoImpl implements IUserDao {
public void insert(List
批量数据在list中,写入到相应表中的代码
...
}
//查询所有数据,使用findAll(),结果在List对象中,不需要修改;
}
修改参考:
(1)在IUserDao.java中添加接口方法:如
public interface IUserDao extends IBaseDao
。。。。
public abstract void insert(List
}
(2)修改UserDaoImpl,实现上述接口方法:如
public class UserDaoImpl implements IUserDao {
。。。。。。。
public void insert(List
if(list.size()==0)
return;
for(int i = 0 ; i <= list.size() ; i++){
User user = list.get(i);
//表中记录不存在时,插入该记录,注意修改以下的查找条件。
if(findByNamePassword(user.getName(),user.getPassword()) == null){
insert(user);
}
}
}
3、在Service中调用上述方法,实现import/export;
(1)在IUserService.java中添加接口方法:
public interface IUserService {
。。。。。。。。。
public void importFromFile(String fileName);
public void exportToFile(String fileName);
}
(2)修改 UserSe
rviceImpl.java,实现上述接口方法。
修改参考:
(1)在IUserService.java中添加接口方法:
public interface IUserService {
。。。。。。。。。
public void importFromFile(String fileName);
public void exportToFile(String fileName);
}
(2)修改UserServiceImpl.java,实现上述接口方法:如
public class UserServiceImpl implements IUserService {
。。。。。。。。
//数据导出方法,使用对象系列化
public void exportToFile(String fileName){
try{
File file = new File(fileName);
DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
ObjectOutputStream obj = new ObjectOutputStream(out);
List
obj.writeObject(list);//向文件输出对象
}
catch(Exception e){
e.printStackTrace();
}
}
//数据导入方法,使用对象系列化
public void importFromFile(String fileName){
try{
File file = new File(fileName);
DataInputStream in = new DataInputStream(new FileInputStream(file));
ObjectInputStream obj = new ObjectInputStream(in);//从文件中读入对象
List
userDao.insert(list);
}
catch(Exception e){
e.printStackTrace();
}
}
}
4、在"文件"主菜单下,添加“导入”“导出”菜单项,并添加菜单的响应代码,响应代码中分别写入调用
importFromFile()和exportToFile(),如“导入”菜单项的监听器接口中(其中mntmImport是
“导入”菜单项对象,JMenuItem 对象) :
mntmImport = new JMenuItem("\u5BFC\u5165");
mntmImport.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
importFromFile();
}
});
在MainUI中,实现importFromFile()和exportToFile(),以便能被相应的菜单项响应:
//导入数据操作
protected void importFromFile(){
String fileName = null;
//使用文件打开对话框,取得用户输入的需保存的文件位置及文件名,见教材“Java 2 实用教程” P18。
FileDialog fileDialog_open = new FileDialog(this,"打开文件对话框",FileDialog.LOAD);
fileDialog_open.setVisible(true);
fileName = fileDialog_open.getFile(); //如果用户单击“取消”按钮,值为null。
if(fileName != null){
String path = fileDialog_open.getDirectory() + fileName; //文件的完整路径
userService.importFromFile(path);
}
}
//导出数据操作
protected void exportToFile(){
String fileName = null;
//使用文件打开对话框,取得用户输入的需保存的文件位置及文件名,见教材“Java 2 实用教程” P18。
FileDialog fileDialog_save = new FileDialog(this,"保存文件对话框",FileDialog.SAVE);
fileDialog_save.setVisible(true);
fileName = fileDialog_save.getFile(); //如果用户单击“取消”按钮,值为null。
if(fileName != null){
String path = fileDialog_save.getDirectory() + fileNa
me; //文件的完整路径
userService.exportToFile(path);
}
}
从而实现import/export功能。
5、测试。因导入功能中,限制了重复数据的导入,为了测试导入的数据是否正确,应该将表中的部分数据删除,然后进行导入测试,但注意不能删除全部数据,至少保留一条记录,否则没有用户帐户就无法完成登录。