2017-05-04 15 views
0

私はJavaでFTPクライアントとサーバープログラミングの基礎を学んでいます。私は現在、クライアントからサーバーに登録されたユーザー名を格納するためにtxtファイルを使用して非常に簡単なログインシステムを実装しようとしています。Java - テキストファイルからすべての登録ユーザー名を読む

しかし、コンソールに登録されていることが示されているにもかかわらず、テキストファイルの最初に登録された行だけを読み取るという問題を発見しました。

私は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

関連する問題