前面我们学习了集合之后,写了一个登陆注册案例,是把用户注册的信息存放在集合中,而当我们学习了i/o流之后,就要改进这个方法,把用户的信息放在文件中。
登陆注册案例中的类的详细分解:
用户类(User):用户名,密码,邮箱,电话,身份证号。。。。— 标准的java描述类
我们应该把对用户的所有的操作抽取出来形成一个类:
用户操作类:注册,登陆
定义一个接口:就是定义的登陆和注册的功能,我们之前说过接口是是对类的功能的一种扩展,
其实当时说的还不够完善,接口本质其实是用来定义规则的
测试类:
main
ava中的分包:
com.edu.domain — 标准的java描述类—User.java
com.edu.dao – 存放的是接口—–UserDao.java
com.edu.dao.impl – 存放的是接口实现类—–UserDaoImpl.java
com.edu.util – 对对象进行操作的工具类
com.edu.test – 测试类————–Test.java
详细代码如下:
User.java—-用户信息类:

public class User {
    private String userName;
    private String password;
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(String userName, String password) {
        super();
        this.userName = userName;
        this.password = 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;
    }
}

UserDao.java—–一个接口,其中定义了注册和登陆两个抽象方法

public interface UserDao {
    //定义注册的功能
    public abstract void regist(User user) throws IOException;

    //登陆功能
    public abstract boolean isLogin(String userName,String password) throws IOException;

}

UserDaoImpl.java—-实现了UserDao接口的类,里面重写了注册和登陆这两个方法,和集合版的登陆注册相比较,主要变得就是这一部分。

public class UserDaoImpl implements UserDao{
    public static File file =new File("a.txt");
    //静态代码块,随着类的加载而加载
    static{
        try {
            file.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void regist(User user) throws IOException {
        // TODO Auto-generated method stub
        BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));
        String u=user.getUserName()+" "+user.getPassword();
        bw.write(u);
        bw.newLine();
        bw.flush();
        bw.close();
    }

    @Override
    public boolean isLogin(String userName, String password) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        boolean flag = false;
        String line;
        while ((line = br.readLine())!=null) {
            String reg = " ";
            String[] split = line.split(reg);
            if (split[0].equalsIgnoreCase(userName)  && split[1].equalsIgnoreCase(password) ) {
                flag = true;
                break;

            }
        }
        br.close();
        return flag;
    }   
}

Test.java–测试类

public class Test {
    public static void main(String[] args) throws IOException {
        while (true) {
            //提示用户目前是需要登录还是需要注册还是需要退出呢
            System.out.println("欢迎来到登录注册页面");
            System.out.println("1:注册");
            System.out.println("2:登陆");
            System.out.println("3:退出系统");

            //创建一个用户操作类对象
            UserDaoImpl udi = new UserDaoImpl();

            //创建键盘录入对象获取键盘录入信息
            Scanner sc = new Scanner(System.in);
            String choice = sc.nextLine();

            //使用switch进行判断
            switch (choice) {
            case "1":
                System.out.println("欢迎来到注册页面");
                System.out.println("请输入你的用户名");
                String userName = sc.nextLine();
                System.out.println("请输入你的密码");
                String password = sc.nextLine();
                //将用户名和密码封装成一个user对象
                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 inputpPassword = sc.nextLine();
                //调用用户操作类对象的登陆方法
                boolean flag = udi.isLogin(inputUserName, inputpPassword);
                if (flag) {
                    System.out.println("登陆成功");
                }else {
                    System.out.println("登录失败");
                }

                break;
            case "3":
            default:
                //输入3或者其他的选项,全部退出系统
                System.exit(0);
                break;
            }
        }
    }
}

结果:

那个logger 含有 info这个方法 java java中login是什么意思_io


那个logger 含有 info这个方法 java java中login是什么意思_io_02


其中遇到的问题:1.当第二次注册时,注册的用户名和密码会覆盖掉钱前面的用户名和密码,后来查看了api手册后发现是BufferedWriter bw = new BufferedWriter(new FileWriter(file));这个构造方法的问题,它每次回从头开始写文件,后来改用BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));这个构造方法就好了

2.当没有注册就进行登陆时会报错,找不到文件,这是因为我在注册的方法中创建的文件,如果,不注册,直接登陆就会提示找不到文件,后来把创建文件写在了静态代码块中,它随着类的加载而加载,一旦运行就创建了文件,这样这个问题就得到了解决。