案例分析:通过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流实现的这个案例,数据是储存在文本中的,当程序结束了,文本中的内容依然存在,当再次启动程序时可以利用之前注册的用户名和密码登陆。