Java基于IO流实现登录和注册功能

 更新时间:2022年04月25日 18:28:29   作者:yangruxi  
这篇文章主要为大家详细介绍了Java基于IO流实现登录和注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

案例分析:

我们之前做过的登录注册案例是把用户信息存进集合里,要用IO流实现的话,就是要把用户信息存入文件中。登录注册两个功能的具体实现是在用户操作类中,所以我们只需要在用户操作类中把之前用户信息存进集合改为存进文件就可以了。

用到的类的详细分解:

(1)用户类(User):用户名,密码,邮箱,电话号码等等各种注册时会用到的东西。我们在实现这个登录和注册案例的时候只需要用户名和密码就够了。这是一个标准Java描述类。

package com.edu.domain;

public class User {
    private String userName;
    private String passWord;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWoed(String passWord) {
        this.passWord = passWord;
    }
    public User(String userName, String passWord) {
        super();
        this.userName = userName;
        this.passWord = passWord;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }


}

(2)我们需要定义一个接口(UserDao)来定义注册和登录功能。接口就是对类的功能的一种扩展,它的本质是用来定义规则的。

package com.edu.dao;

import java.io.IOException;

import com.edu.domain.User;

public interface UserDao {
    //定义两个功能
    //注册功能
    public abstract void regist(User user) throws IOException;

    //登录功能
    public abstract boolean isLogin(String userName,String passWord);

}

(3)用户操作类(UserDaoImpl),也就是之前定义的接口UserDao的实现类。

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{
    public static File file = new File("user.txt");

    //静态代码块,随着类的加载而加载
    static{
        try{
            file.createNewFile();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    //注册功能
    @Override
    public void regist(User user) throws IOException {
        try{
            //把用户信息存进文件里
            String info=user.getUserName()+"="+user.getPassWord();
            //创建高效字符输出流来给文件写入数据,创建了一个可以追加写入的FileWriter,避免了文件中之前的用户信息被覆盖
            BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt",true));
            bw.write(info);
            bw.newLine();
            bw.flush();
            bw.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    //登录功能
    @Override
    public boolean isLogin(String userName, String passWord) {
        boolean flag=false;
        try{
            //创建高效字符输入流来读取数据
            BufferedReader br = new BufferedReader(new FileReader("user.txt"));
            String line;
            while ((line=br.readLine())!=null) {
                String[] s=line.split("=");
                if (s[0].equals(userName)&&s[1].equals(passWord)) {
                    flag=true;
                }
            }
        }catch(IOException e){
            e.printStackTrace();
        }
        return flag;
    }


}

(4)在用户完成注册登录后,我们可以实现某种功能了,例如:猜数字小游戏。再建一个游戏类(GuessNumber)。

package com.edu.game;

import java.util.Scanner;

public class GuessNumber {
    public static void playGame(){
        //获取一个1到100的随机数
        int random = (int)(Math.random()*100+1);

        //键盘录入
        Scanner sc = new Scanner(System.in);
        //给出提示
        System.out.println("请输入所猜的数字");
        int number = sc.nextInt();

        while(true){
            if(number==random){
                System.out.println("恭喜你猜对了!");
                break;
            }else if(number>random){
                System.out.println("大了,请继续输入:");
                number=sc.nextInt();
            }else if(number<random){
                System.out.println("小了,请继续输入:");
                number=sc.nextInt();
            }
        }
    }

}

(5)测试类(Test)。

package com.edu.test;

import java.io.IOException;
import java.util.Scanner;

import com.edu.dao.impl.UserDaoImpl;
import com.edu.domain.User;
import com.edu.game.GuessNumber;

public class Test {
    public static void main(String[] args) throws IOException {
        while (true) {
            //创建键盘录入对象,获取键盘录入信息
            Scanner sc = new Scanner(System.in);
            System.out.println("欢迎来到注册登录界面!");
            System.out.println("1.注册");
            System.out.println("2.登录");
            System.out.println("3.退出");
            String choice = sc.nextLine();

            //创建一个用户操作类
            UserDaoImpl udi = new UserDaoImpl();

            //利用switch循环对选择进行操作
            switch(choice){
            case "1":
                System.out.println("欢迎来到注册界面!");
                System.out.println("请输入用户名:");
                String userName = sc.nextLine();
                System.out.println("请输入密码:");
                String passWord = sc.nextLine();
                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 InputPassWord = sc.nextLine();
                if (udi.isLogin(inputUserName,InputPassWord)) {
                    System.out.println("登陆成功!可以玩游戏了!");
                    GuessNumber.playGame();
                }else{
                    System.out.println("登录失败!");
                }
                break;
            case "3":
            default:
                //对于3或者其他数字的选择,都直接退出系统
                System.exit(0);
                break;

            }

        }

    }

}

运行结果:

登录的注册的运行结果:

猜数字游戏后退出系统:

案例实现过程中遇到的小问题:

如果用下面这个构造来创建高效字符输出流对象,程序每运行一次,新输入的用户信息会把之前的用户信息覆盖掉,文件中只有最近一次存入的用户信息。

BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt");

如何解决这个问题:

我们用下面这个构造来创建高效字符输出流来给文件写入数据,创建了一个可以追加写入的FileWriter,避免了文件中之前的用户信息被覆盖。

BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt",true));

参考:

FileWriter(String fileName, boolean append)
//根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象

例如:我注册了三次,文件中就有了这三次存入的用户信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring是怎么扩展解析xml接口的

    Spring是怎么扩展解析xml接口的

    这篇文章主要介绍了Spring是怎么扩展解析xml接口的,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Java中的多种文件上传方式总结

    Java中的多种文件上传方式总结

    这篇文章主要介绍了Java中的多种文件上传方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • JEE与Spring Boot代码性能比较分析

    JEE与Spring Boot代码性能比较分析

    JavaEE与Spring Boot其实很难比较测试,前者适合单体SOA架构,后者适合微服务,但是还是有好事者把两者放在一起比较性能。这篇文章主要介绍了JEE与Spring Boot代码性能比较,需要的朋友可以参考下
    2018-11-11
  • Spring搭配Ehcache实例解析

    Spring搭配Ehcache实例解析

    这篇文章主要为大家详细介绍了Spring搭配Ehcache实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • java实现JSON字符串格式化输出

    java实现JSON字符串格式化输出

    这篇文章主要为大家详细介绍了如何使用java实现JSON字符串格式化输出,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2024-01-01
  • 聊聊Lombok中的@Builder注解使用教程

    聊聊Lombok中的@Builder注解使用教程

    @Builder注解的作用主要是用来生成对象,并且可以为对象链式赋值。接下来通过本文给大家介绍Lombok中的@Builder注解使用教程,感兴趣的朋友一起看看吧
    2021-11-11
  • SpringBoot实现登录校验(JWT令牌)

    SpringBoot实现登录校验(JWT令牌)

    JWT全称为JSON Web Token,是一种用于身份验证的开放标准,本文主要介绍了SpringBoot实现登录校验(JWT令牌),具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • MyBatis是如何实现日志模块的详解

    MyBatis是如何实现日志模块的详解

    这篇文章主要给大家介绍了关于MyBatis是如何实现日志模块的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 探索分析Redis AOF日志与数据持久性

    探索分析Redis AOF日志与数据持久性

    这篇文章主要为大家介绍了探索分析Redis AOF日志与数据持久性详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • idea推送项目到gitee中的创建方法

    idea推送项目到gitee中的创建方法

    这篇文章主要介绍了idea推送项目到gitee中的创建方法,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08

最新评论