登陆注册案例——IO流实现

案例分析:通过IO流将注册所录入的数据写入文本,在登陆时通过输入流验证所输入用户名、密码是否和文本记录的相同。

这里可以分为四个包

domain——标准java描述类

dao——存放接口

impl——存接口实现类

text——测试类

domain中写一个标准的User类

dao中的接口有 regist() 和 isLogin()两个方法

impl中实现 regist() 和isLogin()两个方法,且创建一个File,用static修饰,将数据导入文本中;

text类中调用方法测试;

具体代码:

标准User类:

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 setPassword(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
	}
}
接口:

public interface UserDao {
	//定义两个方法,一个登陆,一个注册
	public abstract void regist(User user);
	
	public abstract boolean isLogin(String userName,String password);

}
接口实现类:

public class UserDaoImpl implements UserDao{
	private static File file = new File("user.txt");
	
	//静态代码块:随着类的加载而加载
	static{
		//创建文件
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void regist(User user) {
		try {
			//取出user对象中的用户名和密码,存入user.txt对象
			String info = user.getUserName()+"="+user.getPassword();
			BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));//创建了一个可以追加写入的FileWriter
			//往文件中写入数据
			bw.write(info);
			bw.newLine();
			bw.flush();
			bw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public boolean isLogin(String userName, String password) {
		/**
		 * 1.创建字符高效流对象,关联user.txt
		 * 2.一次读取一行
		 * 3.将读取到的内容切割
		 * 4.和前台传递过来的用户名和密码进行对比,成功则改变flag的标示
		 */
		boolean flag = false;
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String line;
			while ((line = br.readLine())!=null) {
				String[] strings = line.split("=");
				if (userName.equals(strings[0])&&password.equals(strings[1])) {
					//改变标示
					flag = true;
				}
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return flag;
	}	
}
测试类:

public class Test {
	public static void main(String[] args) {
		UserDaoImpl udi = new UserDaoImpl();
		
		while (true) {
			System.out.println("-----欢迎来到登陆注册页面------");
			System.out.println("1:注册");
			System.out.println("2:登陆");
			System.out.println("3:退出");
			//创建用户操作类对象
			
			
			Scanner sc = new Scanner(System.in);
			String chioce = sc.nextLine();
			switch (chioce) {
			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();
				boolean login = udi.isLogin(inputUserName, inputPassword);
				if (login) {
					System.out.println("登陆成功");
				}else {
					System.out.println("登录失败");
				}
				break;
			case "3":
			default:
				System.exit(0);
				break;
			}
		}
	}
}

这个登陆注册案例和之前用集合实现的登陆案例大体相同,主要的区别就是在于前者讲数据储存在集合中,当程序重新运行是,数据便没有了;而通过IO流实现的这个案例,数据是储存在文本中的,当程序结束了,文本中的内容依然存在,当再次启动程序时可以利用之前注册的用户名和密码登陆。



你可能感兴趣的:(登陆注册案例——IO流实现)