概述
基于IO流的登录注册案例
1.需求分析:
实现登录注册的过程,利用IO流,将用户信息存储到一个文本文档中(uesr.txt),可
以长期存储使用。
2.案例分包:
domain包下存放java描述类(Uesr类)
dao包下存放接口(UserDao接口)
dao.impl包下存放接口的实现类(UserDaoImpl类)
额外加一个存放本案例测试类的test包,存放测试类(test类)
如图:
3.详细案例分析:
(1)首先在开始界面,用户可以任意选择 1.注册 2.登录 3.退出 其中一项
(2)用户选择注册,会跳转到注册界面,提示用户输入一些个人信息,然后提示完成注册,并把用户信息保存到文本文件中,进行保存,程序不退出,可以后续操作
(3)用户选择登录,会跳转到登录界面,提示用户输入用户名和密码,然后根据文档中已经保存的用户信息进行对比,如果有相同的用户名和密码,提示登录成功,否则登录失败,程序不退出,可以后续操作
(4)用户选择退出,则提示用户系统退出,程序结束运行
(5)用户输入不在选项范围内,提示输入有误,程序结束运行
4.代码实现,具体类分析
(1)java描述类(Uesr类)
分析:一个简单的java描述类,不做详细叙述
具体代码:
package com.edu.domain; public class User { //User类的成员变量,为了简化程序,这里只有用户名和用户密码两个成员变量 private String name; private String password; //有参以及无参构造方法 public User(String name, String password) { super(); this.name = name; this.password = password; } public User() { super(); // TODO Auto-generated constructor stub } //set/get方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
(2)接口(UserDao接口)
分析:接口里定义了该案例用户操作实现类里要重写的方法,一般来说写好的接口可以多次使用,例如利用集合,IO流,或者数据库实现的用户登录注册案例都可以使用此接口,只是在该接口的实现类里重写这两个方法的时候写的代码不同而已。
同时,为了简化代码的操作性,在注册方法里可以把用户的各种信息封装成一个
用户对象,把数据传进来,这样可以有效的实现注册,并且不会因为参数过多而显得繁琐。
具体代码:
package com.edu.dao; import com.edu.domain.User; public interface UserDao { //实现注册的方法 public abstract void regist(User user); //实现登录的方法 public abstract boolean isLogin(String name,String password); }
(3)接口的实现类(UserDaoImpl类)
分析:接口的实现类才是该案例的核心所在,界面的输入数据在这里才会得到处理。无论是注册的信息要保存到文档里面,还是登陆信息与文档保存信息的比对,验证是否登陆成功,都会把信息传到这里,然后进行数据操作。
这里要说个东西:
FileWrite的构造方法:
public FileWriter(File file, boolean append)throws IOException
字节写入文件末尾处,而不是写入文件开始处。根据给定的 File 对象构造一个 FileWriter 对象。如果第二个参数为 true,则将
在写IO流的文章里写过FileWrite,都是用的public FileWriter(File file)构造方
法,这样向文件中写数据,每次默认都是从开始处写入。对于该案例来说,会把已经保存的用户信息覆盖掉,这是不允许的,因此改用上述的构造方法,这样对于文件的数据写入是将字节写入文件末尾处,不会覆盖已有的数据。
另外,这里还用到了一个静态代码块,写在类中方法外,该代码块随着类的加
载而运行。格式为:
static{ 代码块 }
这里引用静态代码块,是首次运行,加载该类的时候,创建File的对象,防止
出现一开始选择登录会出现文件找不到异常。
具体代码:
package com.edu.dao.impl; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import com.edu.dao.UserDao; import com.edu.domain.User; public class UserDaoImpl implements UserDao{ static File file = new File("user.txt"); //静态代码块,随着类的加载而加载 static{ try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void regist(User user) { try { BufferedWriter bw = new BufferedWriter(new FileWriter(file,true)); //拼接字符串 String info = user.getName() + "--" + user.getPassword(); //写进去 bw.write(info); //换行 bw.newLine(); //刷新 bw.flush(); //释放资源 bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean isLogin(String name, String password) { boolean flag = false; try { BufferedReader br = new BufferedReader(new FileReader(file)); //读数据,然后进行比对数据 String line; while((line = br.readLine())!= null){ String[] strings = line.split("--"); if(name.equals(strings[0])&&password.equals(strings[1])){ flag = true; } } } catch (Exception e) { e.printStackTrace(); } return flag; } }
(4)测试类(test类)
分析:测试类里主要就是提示输入,获取数据,然后传给操作实现类进行处理。用while循环,可以使程序一直运行,除非用户输入错误或者主动退出。
具体代码:
package com.edu.test; import java.io.IOException; import java.util.Scanner; import com.edu.dao.impl.UserDaoImpl; import com.edu.domain.User; public class Test { public static void main(String[] args) throws IOException { //创建一个用户操作类对象 UserDaoImpl udi = new UserDaoImpl(); //while循环 while (true) { System.out.println("欢迎来到登录注册界面!"); System.out.println("1.注册"); System.out.println("2.登录"); System.out.println("3.退出"); System.out.println("请输入你的选项:"); //创建键盘录入对象,获取键盘录入数字 Scanner sc = new Scanner(System.in); String choise = sc.nextLine(); switch (choise) { case "1": System.out.println("注册界面:"); System.out.println("请输入用户名:"); String useName = sc.nextLine(); System.out.println("请输入密码:"); String pwd = sc.nextLine(); User user = new User(useName, pwd); udi.regist(user); System.out.println("注册成功!"); break; case "2": System.out.println("登录界面:"); System.out.println("请输入用户名:"); String inputuseName = sc.nextLine(); System.out.println("请输入密码:"); String inputpwd = sc.nextLine(); boolean flag = udi.isLogin(inputuseName, inputpwd); if (flag) { System.out.println("登录成功!"); }else{ System.out.println("登录失败!"); } break; case "3": System.out.println("你退出了此系统!"); System.exit(0); break; default: System.out.println("你的选项错误,系统退出!"); System.exit(0); break; } } } }
5.运行结果:
(1)程序运行截图:
(2)选择注册,并输入信息:
文件中会将信息保存:
(3)选择登录测试:
(4)选择退出或者错误输入:
6.案例总结:
并保存到文本文件中。使用了静态代码块,实现了文件对象随着类的加载而创建;利用了FileWriter的一个构造方法,实现了文件的内容追加输入。还有就是各种包,存哪个类等等,都是常用的开发标准。该案例简单的利用IO流,实现了用户的登录注册。程序可以正确运行进行登录注册,
最后
以上就是跳跃日记本为你收集整理的java案例-基于IO流的登录注册案例的全部内容,希望文章能够帮你解决java案例-基于IO流的登录注册案例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复