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

基于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.案例总结:

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

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


  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值