Java - 从文本文件中读取所有注册的用户名

Java - Read all registered usernames from textfile

我正在 Java 学习 FTP 客户端和服务器编程的基础知识。我现在正在尝试通过使用 txt 文件将已注册的用户名从客户端存储到服务器来实现一个非常简单的登录系统。

然而,我发现它只会读取文本文件的第一个注册行,即使它已在控制台中显示已注册,我仍然得到无效用户名的结果。

我试图通过使用缓冲的读取行 reader 将每一行读入 txt 文件来修复错误,但我仍然卡住了。有什么我可以遵循的建议吗?非常感谢你帮助我。

截图

FTPClient.java

class FTPClient
{
    public static void main(String args[]) throws Exception
    {
    Socket soc=new Socket("127.0.0.1",5217);
    transferfileClient t=new transferfileClient(soc);
    t.userLogin();

}
}

class transferfileClient
{
    Socket ClientSoc;

    DataInputStream din;
    DataOutputStream dout;
    BufferedReader br;
    transferfileClient(Socket soc)
    {
        try
        {
            ClientSoc=soc;
            din=new DataInputStream(ClientSoc.getInputStream());
            dout=new DataOutputStream(ClientSoc.getOutputStream());
            br=new BufferedReader(new InputStreamReader(System.in));

        }
        catch(Exception ex)
        {
        }       
    }

    void SendFile() throws Exception
    {       
        //Send File from Client to Server   
    }        

    public void userLogin() throws Exception{
        System.out.println("Press 1 to LOGIN or 2 to CREATE a new account");
        System.out.print("\nEnter Choice :");
        int choice; 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        choice = Integer.parseInt(br.readLine());
        if(choice==1)
        {

            validateUser();
        }

        else if(choice==2)
        {

            writeFileIO();
            userBack();
        }
    }

    void userBack() throws Exception {
        userLogin();
    }

    void validateUser() throws Exception{
        BufferedReader getIt = new BufferedReader(new InputStreamReader(System.in));
        String userName = "";

        try{ 
            FileInputStream fstream = new FileInputStream("../FTPServer/userInfo.txt");

            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            System.out.println("Enter your username");
            userName = getIt.readLine();

            while ((strLine = br.readLine()) != null){
                if (userName.equals(strLine)){
                    System.out.print("Successful Login\n");
                    displayMenu();
                }
                else{ 
                    System.out.println("Invalid Username");
                    userBack();
                }
            }

            in.close();
        }   catch (Exception e) {//Catch exception if any
        System.out.println("\nError in validate user");
    }

}

    //Store new username into text file 
    public void writeFileIO()
    {
      while(true){ 
        System.out.print("Enter your new username: ");
        Scanner scan = new Scanner(System.in);
        String text = scan.nextLine();
        FileWriter fWriter = null;
        BufferedWriter writer = null;

        try{
            fWriter = new FileWriter("../FTPServer/userInfo.txt", true);
            writer = new BufferedWriter(fWriter);
            writer.write(text);
            writer.newLine();
            writer.close();
            System.out.println("Your new username has been created.");
            return;
        } 
        catch (Exception e) {
        System.out.println("Error!");
    }
}

//Successful login - show display menu for file transfer
public void displayMenu() throws Exception
    {   
        while(true)
        {   

            System.out.println("Files in directory");
            System.out.println("=========================");
            System.out.println("[ MENU ]");
            System.out.println("1. Upload File");
            System.out.println("2. Download File");
            System.out.println("3. Delete File");
            System.out.println("4. Exit");
            System.out.print("\nEnter Choice :");

            int menuchoice;
            menuchoice=Integer.parseInt(br.readLine());
            if(menuchoice==1)
            {
                dout.writeUTF("SEND");
                SendFile();
            }
            else if(menuchoice==2)
            {
                dout.writeUTF("GET");
                ReceiveFile();
            }
            else if(menuchoice==3)
            {
                dout.writeUTF("DEL");
            }
            else
            {
                dout.writeUTF("DISCONNECT");
                System.exit(1);
            }
        }
    }
}

诀窍在于 validateUser 函数:

只需将 else 语句放在 while 循环之外即可:

原因:- while循环运行,它检查文本文件中的第一行,它失败然后落入 'else' ,然后调用 userBack 函数,意思是未检查文本文件的其余部分。

  void validateUser() throws Exception{
            BufferedReader getIt = new BufferedReader(new InputStreamReader(System.in));
            String userName = "";

            try{ 
                FileInputStream fstream = new FileInputStream("../FTPServer/userInfo.txt");

                DataInputStream in = new DataInputStream(fstream);
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                String strLine;

                System.out.println("Enter your username");
                userName = getIt.readLine();

                while ((strLine = br.readLine()) != null){
                    if (userName.equals(strLine)){
                        System.out.print("Successful Login\n");
                        displayMenu();
                    }
                }

                 System.out.println("Invalid Username");
                        userBack();

                in.close();
            }   catch (Exception e) {//Catch exception if any
            System.out.println("\nError in validate user");
        }