java案例-基于IO流的登录注册案例

来源:互联网 发布:xmind8破解补丁 mac 编辑:程序博客网 时间:2024/05/24 01:08

基于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 blocke.printStackTrace();}}@Overridepublic 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 blocke.printStackTrace();}}@Overridepublic 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.案例总结:

该案例简单的利用IO流,实现了用户的登录注册。程序可以正确运行进行登录注册,

并保存到文本文件中。使用了静态代码块,实现了文件对象随着类的加载而创建;利用了FileWriter的一个构造方法,实现了文件的内容追加输入。还有就是各种包,存哪个类等等,都是常用的开发标准。


原创粉丝点击