搜档网
当前位置:搜档网 › 数据导入导出功能的实现方法

数据导入导出功能的实现方法

数据导入/导出功能的实现

注意:大家首先要读懂以下说明的实现方法,然后再根据自己题目的要求,进行相应的修改。

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 list);
}
(2)修改UserDaoImpl,实现上述接口方法:
public class UserDaoImpl implements IUserDao {
public void insert(List list){
批量数据在list中,写入到相应表中的代码
...
}

//查询所有数据,使用findAll(),结果在List对象中,不需要修改;

}
修改参考:
(1)在IUserDao.java中添加接口方法:如
public interface IUserDao extends IBaseDao{
。。。。
public abstract void insert(List list);
}
(2)修改UserDaoImpl,实现上述接口方法:如
public class UserDaoImpl implements IUserDao {
。。。。。。。
public void insert(List 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 list = findAllUser();
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 list = (List)obj.readObject();
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、测试。因导入功能中,限制了重复数据的导入,为了测试导入的数据是否正确,应该将表中的部分数据删除,然后进行导入测试,但注意不能删除全部数据,至少保留一条记录,否则没有用户帐户就无法完成登录。


相关主题