在java中创建注册程序?

时间:2015-11-03 19:52:38

标签: java file-io text-files

我有一个简单的问题。

我正在尝试使用java中的文本文件创建注册程序。

我写了一些代码来进行注册,但起初我的程序应该检查文本文件中是否存在用户名。

如果用户名存在,则程序会要求用户输入新用户名。

但我的代码中有一些错误我不知道,它不会检查用户名是否存在。

这是我的代码:

                System.out.println("Registration Page");
                System.out.println("NOTE: your username is a unique one so it cannot be changed.");
                System.out.printf("Username: ");
                String user = input.next();
                System.out.printf("Password: ");
                String pass = input.next();
                System.out.printf("Confirm Password: ");
                String conf = input.next();
                int length = pass.length();
                int passInt = Integer.parseInt(pass);
                int confInt = Integer.parseInt(conf);
                if(length < 6)
                    System.out.println("Too short password, password must be 6 characters or more");
                else
                {
                if(passInt == confInt)
                {
                Scanner z = null;
                try{
                z = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\accounts.txt"));
                boolean checkname = false;
                while(z.hasNext())
                {
                String a = z.next();
                int b = z.nextInt();
                if(a == null ? user == null : a.equals(user))
                checkname = true;
                }
                if(checkname)
                System.out.println("Username is already exists and used, please type another one");
                else
                {
                Formatter x = null;
                try{
                FileWriter f = new FileWriter("C:\\Users\\فاطمة\\Downloads\\accounts.txt", true);
                x = new Formatter(f);
                x.format("%s %s%n",user.toUpperCase(),pass);
                System.out.println("You registered succesfully");
                x.close();
                }
                catch(Exception e)
                {
                e.printStackTrace();
                }
                }
                }                    
                catch(Exception e){}
                }
                else
                    System.out.println("Password and confirm password are not matching");
                }

2 个答案:

答案 0 :(得分:2)

因此,不要使用Scanner打开和读取文件,而是分别尝试使用BufferedReader和Writer进行读写。在下面的代码中,我们正在读取文件,如果名称存在,它将把你的布尔值更改为true,然后抛出你的错误,否则它将完成注册。它还将编写新信息。现在,您可能想要添加的一件事是,如果信息无效,则循环回到顶部。

另外作为一个方面,为了更好的跨操作系统功能,你应该使用File.separator(),它将做同样的事情。

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Registration Page");
        System.out.println("NOTE: your username is a unique one so it cannot be changed.");
        System.out.printf("Username: ");
        String user = input.next();
        System.out.printf("Password: ");
        String pass = input.next();
        System.out.printf("Confirm Password: ");
        String conf = input.next();
        int length = pass.length();
        int passInt = Integer.parseInt(pass);
        int confInt = Integer.parseInt(conf);
        File file = new File("C:"+File.separator + "Users"+File.separator + "فاطمة"+File.separator + "Downloads"+File.separator + "accounts.txt");
        if (length < 6) {
            System.out.println("Too short password, password must be 6 characters or more");
        } else {
            if (passInt == confInt) {

                try {
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    String current;
                    boolean checkname = false;
                    while ((current = br.readLine()) != null) {
                        if(current.equalsIgnoreCase(user)){
                            checkname = true;
                    }
                }
                if (checkname) {
                    System.out.println("Username is already exists and used, please type another one");
                } else {
                    Formatter x = null;
                    try {
                        FileWriter f = new FileWriter(file.getAbsoluteFile());
                        BufferedWriter bw = new BufferedWriter(f);
                        bw.write(user);
                        bw.close();
                        x = new Formatter(f);
                        x.format("%s %s%n", user.toUpperCase(), pass);
                        System.out.println("You registered succesfully");
                        x.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } 
            catch (Exception e) {
            }
        } else {
            System.out.println("Password and confirm password are not matching");
        }
     }
  }
}

答案 1 :(得分:0)

我发现我的代码有什么问题:

问题是用户名是以这种格式在文本文件中找到的:

JOHN 114477
SARAH 887755

用户名是大写字母,当我输入新用户名时,它用小写字母书写,所以当在文本文件中搜索用户名时,程序会将小写字母的名称与大写字母的名称进行比较。匹配,因此它允许我输入之前存在的相同用户名。

正确的解决方案是编辑此行并添加toUpperCase();就像这样:

String user = input.next().toUpperCase();