2017-05-04 49 views
0

我正在学习Java中的FTP客户端和服务器编程的基础知识。我现在试图通过使用一个txt文件来实现一个非常简单的登录系统,以将来自客户端的注册用户名存储到服务器中。Java - 从textfile中读取所有注册用户名

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

我试图通过使用读取线路缓冲读取器来解决错误,据说每行读入txt文件,但我仍然卡住。有没有我可以遵循的建议?非常感谢你帮助我。

截图

Error shown from login attempt on newly created usernameUserInfo

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); 
      } 
     } 
    } 
} 

回答

1

的诀窍是在ValidateUser函数,以便:

只要把while循环外else语句:

原因: - 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"); 
     } 
+0

非常感谢您的解释!有效 :) – tryingmybest