2012-10-05 78 views
-1

開始一個項目,這irriating我。我認爲代碼是好的,但我不明白如何返回記錄或解析該行。導入CSV文件和比較用戶輸入

我有一個CSV文件,該文件顯示這樣的天秤座。

USER PASSWORD 克里斯密碼 米歇爾密碼 約翰密碼

我收到用戶輸入自己的用戶名和密碼,然後試圖比較這些反對CSV以確保1)用戶名存在, 2)如果有,密碼是正確的。說實話,因爲它不是規範的一部分,但我想這樣做,我懷疑這將是同樣的問題,因爲我也不得不哪些部分2不是必需的。正如我所說的,我覺得代碼是好的,但我不知道是什麼格式的變量thisLine會和我的else語句中的BufferedReader正確移動到下一行?

我可以使用thisLine.trim()削減USER PASSWORD不只是用戶?

static void readFromCsvFile(String sFileName,User user)throws FileNotFoundException String thisLine;

 try 
     { 
      BufferedReader reader = new BufferedReader(new FileReader(sFileName)); 
      thisLine = reader.readLine(); 
      System.out.print(thisLine); 

      while((thisLine = reader.readLine()) != null) 
       { 
        if (user.displayUserName() == thisLine) 
        { 
        System.out.print("\nUser <-" + user.displayUserName() + " -> exists!"); 
        reader.close(); 
        } 

        else 
        { 
         thisLine = reader.readLine(); 
        } 
       } 

     } 
     catch(IOException e) 
     { 
      System.out.print("\nUser does not exist\n"); 
      e.printStackTrace(); 
     } 

回答

2

幾點看法,在這裏:

1)thisLine.trim()將只是刪除尾隨空白的開頭和的thisLine內容結束。這是正常的話,特別是如果你要比較兩個字符串,但它不會分裂從變量的用戶名和密碼。

2)要拆分這兩個不同的值,你應該使用thisLine.split(" ")(我假設你的CSV文件使用空格來分隔不同的字段)。

3)另一個錯誤是比較字符串使用==而不是equals,這是正確的方法。

4)由於您在while條件讀取一個新行不需要內部reader.readLine()

5)最後,不要關閉內循環流(或閱讀器)!!在try/catch/finally塊上執行。

所以,用這些更正您的代碼如下:

static void readFromCsvFile(String sFileName, User user) throws FileNotFoundException { 
    String thisLine; 
    BufferedReader reader = new BufferedReader(new FileReader(sFileName)); 
    try 
    { 

     thisLine = reader.readLine(); 
     System.out.print(thisLine); 

     while((thisLine = reader.readLine()) != null)    
      { 
       thisLine = thisLine.trim(); 
       String username = thisLine.split(" ")[0]; 
       if (user.displayUserName().equals(username)) 
       { 
       System.out.print("\nUser <-" + user.displayUserName() + " -> exists!"); 
       break; // break the loop 
       }      
      } 

    } 
    catch(IOException e) 
    { 
     System.out.print("\nUser does not exist\n"); 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      reader.close(); 
     } catch (IOException e) { /* ignore */ } 
    } 
} 
+0

乾杯。試過但同樣的問題!它終止於CSV文件的第一行,並且不會繼續。第一行永遠不會是正確的,因爲它只是標題。 –

+0

修正了它。我正在使用\ t分隔記錄,而不是, –

1

若要比較兩個字符串:

firstString.equal(secondString); 

的另一個問題是thisLine包含用戶名和密碼(「克里斯密碼」爲例),所以你必須分割你的線來分隔的用戶名(「克里斯」)和密碼(「密碼」)。

while((thisLine = reader.readLine()) != null) 
{ 
    thisLine = thisLine.trim() 
    // userData[0] => Username and userData[1] => Password 
    String userData[] = thisLine.split(" "); 
    if (user.displayUserName().equal(userData[0])) 
    { 
     System.out.print("\nUser <-" + user.displayUserName() + " -> exists!"); 
    } 
}