package cn.tedu.liu; import java.io.Serializable; //创建User类,用于存储用户的id和password class User implements Serializable { //1.创建成员变量 private String id; private String password; //2.创建无参构造 public User() { } //3.全参构造 public User(String id, String password) { this.id = id; this.password = password; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
/*创建TestLogin注册类,实现注册功能*/
package cn.tedu.liu; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; import java.util.Scanner; public class TestLogin { public static void main(String[] args) { //method()方法,用户输入信息判断方法 User user = method(); //method2()方法将user类通过序列化写入文件 method2(user); } //用户类 user传入method2()方法 private static void method2(User user) { //创建序列化对象流设置值为null ObjectOutputStream out = null; try { //将序列化流连接文件D:\1.txt out = new ObjectOutputStream(new FileOutputStream("D:\\1.txt")); //将user对象通过序列化流,写入关联文件,进行序列化 /*注意:序列化之前,要提前看一下,User对象,有没有 implements Serializable * 如果User类没有实现Serializable,那么将会提示你,没有可序列化对象*/ out.writeObject(user); System.out.println("恭喜你,注册成功"); }catch(Exception E){ System.out.println("很遗憾,注册失败"); E.printStackTrace(); } } //用户信息判断方法 private static User method() { //1.定义局部变量 User user = null; String id= null; String password= null; while (true){ System.out.println("请输入您要注册的id:");//提示用户输入id Scanner sc = new Scanner(System.in); id = sc.nextLine(); System.out.println("请输入你要注册的id密码:");//提示用户输入密码 password = sc.nextLine(); /*正则运算法则,正则运算的具体规则可以参考泡泡老师的知识体系里的 《新手小白学JAVA 正则表达式 包装类 自动装箱/自动拆箱 BigDecimal》*/ String regexid = "[0-9]{4}"; String regexpassword = "[a-zA-Z]{4}[0-9]{6}"; //第一个判断,如果用户输入的id和密码格式都对,那么结束循环,开始下一步 if (id.matches(id)&&password.matches(password)){ break; //第二个判断,如果执行到这一步,说明第一步判断没有成立 //第一步判断没有成立,有三种可能第一种可能就是用户输入的密码格式不对 }else if(id.matches(regexid)){ System.out.println("密码格式不对,请重新输入"); continue; //第二种可能是用户输入的id格式不对 }else if (password.matches(regexpassword)){ System.out.println("用户名格式不对,请重新输入"); continue; }else{ //第三种情况用户输入的id和密码都不对,如果出现三种情况,循环继续执行,提示用户重新输入 System.out.println("输入id与密码格式不对,请重新输入"); continue; } } //当用户输入的格式正确后,创建user对象,然后将user对象返回 user = new User(id,password); return user; } }
/*创建TestLogin2类,实现登录功能*/
package cn.tedu.liu; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.util.Scanner; public class TestLogin2 { public static void main(String[] args) { //method1()提取之前序列化的对象,将文件中的对象通过反序列化的方式,提取出来 User user = method1(); //method()方法,处理的业务就是登录 method(user); } private static User method1() { //1.创建反序列化流引用类型对象设置初始值为null ObjectInputStream in = null; //2.创建引用类型表名 u 和 o //创建引用类型表里的原理是,这里的局部变量使用范围是方法里 //如果不在这里定义,我们在while循环里定义的变量,当循环结束后,就不能使用了 User u = null; Object o =null; try { //3.创建反序列化对象,将文件与流关联 in = new ObjectInputStream(new FileInputStream("D:\\1.txt")); //4.读取反序列化流对象关联的文件,将文件中之前序列化的User对象取出使用 o = in.readObject(); //我们通过反序列化取出的对象时Object对象,是User的父类对象 //我们在这里对 o进行强转,把它转成User类 //大类型转小类型需要强转 u = (User) o; } catch (Exception e) { e.printStackTrace(); }finally{ try { //5.关闭流对象 in.close(); }catch (Exception e){ e.printStackTrace(); } } //6.将反序列化读取出的对象,返回 return u; } //通过method1()方法,把文件中的user读取出来后,将对象传入method() //method()获取user对象后,就可以获取user对象内的内容 private static void method(User user) { while (true){ Scanner sc = new Scanner(System.in); System.out.println("请输入用户登录id:");//提示用户输入登录的id进行登录 String id = sc.nextLine(); System.out.println("请输入密码:");//提示用户输入登录的密码进行登录 String ps = sc.nextLine(); //用户输入id和password后,我们就需要开始判断了 //这个方法获取到传入的user对象后,我们可以通过getId()和getPassword()方法,获取到user里的信息 //获取到user里的信息后,我们开始做判断 //1.第一种可能,输入的id和password同时匹配时,提示用户输入正确 if (user.getId().equals(id)&&user.getPassword().equals(ps)){ System.out.println("登录成功"); break; //2.第二种可能,只有输入的id正确,但是密码有误,提示用户输入的密码不对,请重新输入 }else if(user.getId().equals(id)){ System.out.println("密码有误"); continue; //2.第三种可能,只有输入的密码正确,但是id有误,提示用户输入的密码不对,请重新输入 }else if(user.getPassword().equals(ps)){ System.out.println("id有误"); continue; //2.第四种可能,用户输入的id和密码都有误,提示用户重新输入 }else{ System.out.println("id和密码都有误"); continue; } } } }