Java IO 序列化流实现注册(Register)与登录(Login)

本文详细介绍了如何使用Java的IO流实现User类的注册与登录功能,包括User类的定义、序列化操作及文件存储,以及登录时的反序列化和验证过程。

Java IO 序列化流实现注册(Register)与登录(Login)

一、 准备User 类

  1. 属性 username 、password,属性进行私有化(private)封装
  2. 方法:无参构造方法和有参构造方法,Getter and Setter 方法
  3. User类必须实现 Serializable 接口
  4. Serializable 接口: 是用于启动对象的序列化功能,可以强制让指定类具备序列化功能,该接口中没有成员,是一个标记接口,这个标记接口用于给序列化类提供UID
  5. User.java 源码如下:
import java.io.Serializable;

/**
 * @author HuiSoul
 */
public class User implements Serializable {

    private String username;
    private int password;

    public User() { }

    public User(String username, int password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

}

二、注册与登录的具体实现

  • 先将User类序列化后保存到本地文件中,再反序列化User类的序列化文件,得到User类对象,调用get() 方法获得对应属性的值,使用该值和用户输入的值进行相应的逻辑判断,模拟各种登录成功和登录失败的场景
  • RegisterAndLogin.java具体实现如下:
public class RegisterAndLogin {

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        //Register

        Scanner scanner = new Scanner(System.in);

        /* 用户手动注册
        System.out.print("请输入用户名:");
        String inputUsername = scanner.next();
        System.out.print("请输入密码:");
        int inputPassword = scanner.nextInt();
        System.out.print("请再次输入密码:");
        int inputPassword2 = scanner.nextInt();
        if(inputPassword == inputPassword2){
            User user = new User(inputUsername,inputPassword2);
            ...
        }*/

        //准备数据 注册的用户名和密码数据以写死
        User user1 = new User("huisoul",123456);
        // 关联本地路径
        FileOutputStream fileOutputStream = new FileOutputStream("D:/111.txt");
        // 修饰器模式
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
        // 将对象放入序列化流中进行序列化操作并刷新文件
        objectOutputStream.writeObject(user1);
        objectOutputStream.flush();

        //关流(释放资源)
        objectOutputStream.close();
        fileOutputStream.close();


        // Login

        User user2 = null;
        //关联本地序列化文件
        FileInputStream fileInputStream = new FileInputStream("D:/111.txt");
        // 修饰器模式
        ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
        // 通过方法反序列化保存User对象的本地文件
        user2 = (User) objectInputStream.readObject();

        // 用户输入
        System.out.print("请输入用户名:");
        String username = scanner.next();
        System.out.print("请输入用户密码:");
        int password = scanner.nextInt();

        // 登录逻辑判断
        if(username.equals(user2.getUsername()) && password == user2.getPassword()){
            System.out.println("Login Succeed");
        }else if(username.equals(user2.getUsername()) && password != user2.getPassword()){
            System.out.println("用户名正确,请检查用户密码");
        } else if(!(username.equals(user2.getUsername())) && password == user2.getPassword()){
            System.out.println("用户密码正确,请检查用户名");
        }else {
            System.out.println("请检查用户名和用户密码");
        }

        //关流(释放资源)
        objectInputStream.close();
        fileInputStream.close();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值