java学习笔记(三十一)i/o流实现登陆注册案例
来源:互联网 发布:苹果蜂窝移动网络位置 编辑:程序博客网 时间:2024/06/05 14:31
前面我们学习了集合之后,写了一个登陆注册案例,是把用户注册的信息存放在集合中,而当我们学习了i/o流之后,就要改进这个方法,把用户的信息放在文件中。
登陆注册案例中的类的详细分解:
用户类(User):用户名,密码,邮箱,电话,身份证号。。。。— 标准的java描述类
我们应该把对用户的所有的操作抽取出来形成一个类:
用户操作类:注册,登陆
定义一个接口:就是定义的登陆和注册的功能,我们之前说过接口是是对类的功能的一种扩展,
其实当时说的还不够完善,接口本质其实是用来定义规则的
测试类:
main
ava中的分包:
com.edu.domain — 标准的java描述类—User.java
com.edu.dao – 存放的是接口—–UserDao.java
com.edu.dao.impl – 存放的是接口实现类—–UserDaoImpl.java
com.edu.util – 对对象进行操作的工具类
com.edu.test – 测试类————–Test.java
详细代码如下:
User.java—-用户信息类:
public class User { private String userName; private String password; public User() { super(); // TODO Auto-generated constructor stub } public User(String userName, String password) { super(); this.userName = userName; this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
UserDao.java—–一个接口,其中定义了注册和登陆两个抽象方法
public interface UserDao { //定义注册的功能 public abstract void regist(User user) throws IOException; //登陆功能 public abstract boolean isLogin(String userName,String password) throws IOException;}
UserDaoImpl.java—-实现了UserDao接口的类,里面重写了注册和登陆这两个方法,和集合版的登陆注册相比较,主要变得就是这一部分。
public class UserDaoImpl implements UserDao{ public static File file =new File("a.txt"); //静态代码块,随着类的加载而加载 static{ try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void regist(User user) throws IOException { // TODO Auto-generated method stub BufferedWriter bw = new BufferedWriter(new FileWriter(file,true)); String u=user.getUserName()+" "+user.getPassword(); bw.write(u); bw.newLine(); bw.flush(); bw.close(); } @Override public boolean isLogin(String userName, String password) throws IOException { BufferedReader br = new BufferedReader(new FileReader("a.txt")); boolean flag = false; String line; while ((line = br.readLine())!=null) { String reg = " "; String[] split = line.split(reg); if (split[0].equalsIgnoreCase(userName) && split[1].equalsIgnoreCase(password) ) { flag = true; break; } } br.close(); return flag; } }
Test.java–测试类
public class Test { public static void main(String[] args) throws IOException { while (true) { //提示用户目前是需要登录还是需要注册还是需要退出呢 System.out.println("欢迎来到登录注册页面"); System.out.println("1:注册"); System.out.println("2:登陆"); System.out.println("3:退出系统"); //创建一个用户操作类对象 UserDaoImpl udi = new UserDaoImpl(); //创建键盘录入对象获取键盘录入信息 Scanner sc = new Scanner(System.in); String choice = sc.nextLine(); //使用switch进行判断 switch (choice) { case "1": System.out.println("欢迎来到注册页面"); System.out.println("请输入你的用户名"); String userName = sc.nextLine(); System.out.println("请输入你的密码"); String password = sc.nextLine(); //将用户名和密码封装成一个user对象 User user = new User(userName, password); //调用用户操作类对象的注册方法 udi.regist(user); System.out.println("注册成功"); break; case "2": System.out.println("欢迎来到登陆页面"); System.out.println("请输入你的用户名"); String inputUserName = sc.nextLine(); System.out.println("请输入你的密码"); String inputpPassword = sc.nextLine(); //调用用户操作类对象的登陆方法 boolean flag = udi.isLogin(inputUserName, inputpPassword); if (flag) { System.out.println("登陆成功"); }else { System.out.println("登录失败"); } break; case "3": default: //输入3或者其他的选项,全部退出系统 System.exit(0); break; } } }}
结果:
其中遇到的问题:1.当第二次注册时,注册的用户名和密码会覆盖掉钱前面的用户名和密码,后来查看了api手册后发现是BufferedWriter bw = new BufferedWriter(new FileWriter(file));这个构造方法的问题,它每次回从头开始写文件,后来改用BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));这个构造方法就好了
2.当没有注册就进行登陆时会报错,找不到文件,这是因为我在注册的方法中创建的文件,如果,不注册,直接登陆就会提示找不到文件,后来把创建文件写在了静态代码块中,它随着类的加载而加载,一旦运行就创建了文件,这样这个问题就得到了解决。
- java学习笔记(三十一)i/o流实现登陆注册案例
- JAVA学习笔记(三十一)
- 【Java学习笔记】19.登录和注册案例(IO流实现)
- java-登陆注册案例
- java中I/O流学习笔记
- java I/O流学习笔记
- 关于java I/O流学习笔记
- java学习笔记(7)——I/O流
- Java学习笔记六(I/O流)
- Java学习笔记(十三)I/O流
- Java 标准 I/O 流编程学习笔记(上)
- Java 标准 I/O 流编程学习笔记(下)
- Java I/O学习笔记
- Java I/O学习笔记
- 【Java学习笔记】I/O
- java I/O 学习笔记
- java web笔记——软件三层结构&MVC模式实现注册登陆案例
- 学习笔记(三十一)
- ListView中item点事件和item中的控件点击事件冲突的简易解决方法
- [unity3D基础篇04]性能优化基础1
- mac版MySQL初始密码设置
- CentOS6.8 安装 nginx + mysql+ php
- 最新360过双网测试版 ISO文件下载
- java学习笔记(三十一)i/o流实现登陆注册案例
- 根据计算两点之间的距离
- FastReport系列-报表分页
- Kotlin:Android世界的Swift
- [YTU]_2640(编程题:运算符重载---矩阵求和)
- iOS 自定义导航栏
- Linux利用管道实现进程间通信
- caffe在window下无GPU的安装、注意点和网络的参数解释!
- 利用fiddler 截获微信传输数据 (方便抓取公众号信息)