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 对象

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

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

(0)

相关推荐

  • Servlet+JavaBean+JSP打造Java Web注册与登录功能

    采用Java Web所实现的MVC结构图如下,其中控制器部分采用Servlet来实现,模型部分采用JavaBean来实现,而大部分的视图采用Jsp页面来实现. 思想基础 JSP+JavaBean两层结构工作原理应该是比较熟悉的,也比较好理解. 但是有一点必须要清楚就是用户通过浏览器来发送网页的请求,此请求到达服务器后在服务器端查找对应的网页,如果是首次请求(第二次就不用解释执行了),对于JSP来说要生成Servlet,然后通过Servlet引擎来执行 Servlet,把调用JavaBean的结果

  • JavaWeb实现用户登录与注册功能

    本文实例为大家分享了JavaWeb实现用户登录与注册的具体代码,供大家参考,具体内容如下 所用知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础  JSP   Servlet  JDBC  Tomcat 数据库:MySQL 用到的Jar包 druid数据库连接池  dbutils JDBC数据库操作工具  MySQL jar包 实现效果基本为注册用户,注册成功将数据写入数据库,登录过程查看数据库中是的用户名,密码是否匹配,匹配跳转到登录成功页面,失败返回登录页面. 思路

  • Java简易登录注册小程序

    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. 功能介绍:简单的登录注册系统,使用了数据库sqlserver.单例模式.正则表达式以及图形化开发等知识. 1.在登录界面,可以登录或者注册用户. 注册用户界面,按照正则表达式规定的格式要求来输入信息,若有误,则重新输入. 2.点击注册,首先连接SQLserver数据库,连接成功则会判断该用户名是否已经存在,若存在,则给出提示.反之则进行注册. 3.登录界面,点击登录按钮时,首先与数据库

  • JAVA简单实现MD5注册登录加密实例代码

    开发环境:jdk1.7,eclipse 框架:springmvc,mybatis 工具:maven 以下代码复制即可实现MD5加密 创建一个mave项目,加web.不懂得可以搜索一下就有了. 注册用户的JSP页面代码如下. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PU

  • JavaWeb简单用户登录注册实例代码(有验证码)

    需求 编写login登录界面(用户名,密码,验证码,登陆按钮,注册按钮) 设计关系数据库(编号,用户名,密码) 编写注册功能,将数据存储在数据库中.(姓名不能重复,设为主键,重复会注册失败) 编写登录功能 .首先获取验证码,先判断验证码是否正确,不正确则显示验证码错误.验证码正确后再获取用户名和密码,进行数据库的搜索比对,若正确则重定向到成功的界面,并且将用户名显示. jar包 技术选型 Servlet + JSP + Mysql + JDBCTemplate + Druid + BeanUti

  • Java简易登录注册功能实现代码解析

    哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要. 哈希算法最重要的特点就是: 相同的输入一定得到相同的输出: 不同的输入大概率得到不同的输出. 哈希算法的目的就是为了验证原始数据是否被篡改. 我们来简单实现一个用于用户注册和登录最基本的功能. 在登录中,要检查是否存在某个用户信息,每个用户信息都是唯一的,所以可以借助Set的特性来操作用户信息的存放. 在注册中,要检查用户名是否已经被注册,而每个用户名也是唯一的,所以在这里也利

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

  • JavaWeb实现用户登录与注册功能(服务器)

    本文实例为大家分享了JavaWeb实现用户登录与注册功能的具体代码,供大家参考,具体内容如下 用到的知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础  JSP   Servlet  JDBC  Tomcat 数据库:MySQL 用到的Jar包 druid数据库连接池  dbutils JDBC数据库操作工具  MySQL jar包 总体结构: 客户端数据库部分网址 思路: 服务器部分采用JavaEE三层架构 (1).表现层:通俗讲就是展现给用户的界面,即用户在使用一个

  • JavaWeb实战之用Servlet+JDBC实现用户登录与注册

    一.前言 使用到的技术栈: (1)JDBC (2)Servlet (3)MySQL 二.准备工作 (1)书城用户数据库与表创建 (2)编写用户类对象JavaBean (3)编写JdbcUtils对数据库进行交互(使用德鲁伊数据库连接池) (4)编写web层 最终编写好的第二阶段登陆注册文件结构为 dao中定义了基础的操作数据库代码,具体功能有 1.Insert.update.delete(修改) 2.查询一个对象(返回一个对象) 3.查询一个数组对象(数组返回多个对象) 4.返回某一个特定值对象

  • Java+mysql用户注册登录功能

    最近刚刚开始学习mysql,所以就写了这个很基本的用户注册登录的功能来练练手.虽然这个很简单,但是我还是看到了自己学习的进步,很开心.哈哈哈. 这里要注意数据表的建立: 直接上代码吧,里面注释很详细了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以实现用户的注册和登录 */ private static String username;//用户登录注册的姓名 privat

随机推荐