2016-12-02 75 views
0

我試圖做一個登錄名/密碼程序,詢問你是否有一個帳戶,你也可以做一個。
通過帳戶我的意思是程序會給你一個隨機的8位數字。
我也有一個FileWriter,它根據您提供的ID創建一個文件。我有一個FileReader,它最終將讀取您以前導出到您的文件的內容,以便您可以更新它。如何比較整數和文件名?

我遇到的問題是,當我詢問用戶他們是否有帳戶時,如果他們說是,它會詢問用戶的用戶ID。

我的計劃是,當它讀取您的用戶ID時,它會掃描保存在我的.java文件中的文件夾,然後查找與您的用戶ID具有相同名稱的.txt文件。例如,如果您創建了一個帳戶,並且它提供的用戶ID是12345678,它將創建一個名爲12345678的文件,然後當您輸入用戶ID時,它將掃描以查看該文件是否存在。

目前出現的問題是它打印

錯誤文件找不到(捕捉字符串我寫的)

,即使我有文件夾中的該文件。
我認爲我的比較方式有問題,看看UserID是否與任何文件名匹配。

「Login」類。

import java.awt.*; 
import hsa.Console; 
import java.util.Random; 
import java.io.*; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.FileReader; 
import java.io.FileNotFoundException; 

public class Login 
{ 
static Console c; 

static Login player1; 

public static void main (String[] args) 

{ 
    player1 = new Login(); 
    player1.FileReaderTest (25756326); 
    //player1.Userlogin(); //I think it has something to do with this 
} // main method 


public void Userlogin (File input) 
{ 
    c = new Console(); 

    Random rand = new Random(); 

    c.println ("Hello do you have an account?"); 
    String Q1 = c.readLine(); 
    Q1 = Q1.toUpperCase(); 
    if (Q1.equals ("YES")) 
    { 
     c.println ("Please input your User ID"); 
     int login = c.readInt(); 
     if (String.valueOf(login).equals (input))//I think it has something to do with this 
     { 
      try 
      { 
       FileReader reader = new FileReader (input); 
       BufferedReader buf = new BufferedReader (reader); 

       String line1 = buf.readLine(); 
       String line2 = buf.readLine(); 

       buf.close(); 
       c.println (line1); 
       c.println (line2); 

      } 
      catch (FileNotFoundException e) 
      { 
       c.println ("Error File Not Found"); 

      } 
      catch (Exception e) 
      { 
       c.println ("ERROR"); 

      } 


     } 
    } 

    else if (Q1.equals ("NO")) 
    { 
     c.println ("Please enter your name "); 
     String name = c.readLine(); 
     int UserID = rand.nextInt (99999999); 
     c.println ("Your User ID is " + UserID); 
     player1.FileCreation (UserID); 
     player1.FileReaderTest (UserID); 
    } 

    while (!Q1.equals ("YES") && !Q1.equals ("NO")) //While Q1 != YES || NO 
    { 
     c.println ("Please Answer the question with Yes or No"); 
     c.println ("Hello do you have an account?"); 
     String Q2 = c.readLine(); 
     Q2 = Q2.toUpperCase(); 
     if (Q2.equals ("YES")) 
     { 
      c.println ("Ok lets start"); 
      break; 
     } 
     else if (Q2.equals ("NO")) 
     { 
      c.println ("Please enter your name "); 
      String name = c.readLine(); 
      int UserID = rand.nextInt (89999999) + 10000000; 
      c.println ("Your User ID is " + UserID); 
      player1.FileCreation (UserID); 
      player1.FileReaderTest (UserID); 
      break; 
     } 

    } //While Q1 != YES || NO 



} //Public void Main 


public void FileReaderTest (int UserID) 
{ 
    File input = new File (String.valueOf (UserID)); 
    player1.Userlogin (input); 

    try 
    { 
     FileReader reader = new FileReader (input); 
     BufferedReader buf = new BufferedReader (reader); 

     String line1 = buf.readLine(); 
     String line2 = buf.readLine(); 


     buf.close(); 
     c.println (line1); 
     c.println (line2); 

    } 
    catch (FileNotFoundException e) 
    { 
     c.println ("Error File Not Found"); 

    } 
    catch (Exception e) 
    { 
     c.println ("ERROR"); 

    } 




} 


public void FileCreation (int UserID) 
{ 
    try 
    { 
     Writer writer = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (String.valueOf (UserID)), "utf-8")); 
    } 
    catch (IOException ex) 
    { 
    } 
} 
} // Login class 
+1

如何比較字符串與文件? –

+0

我不知道這個'hsa.Console'類正在做什麼。 –

+0

您需要將其與文件名相比較,而不是文件 – Jobin

回答

1

所以,你有一個File input,你要比較的名的文件,所以你不是想

String.valueOf(login).equals (input.getName()); 

如果您在

File input = new File (String.valueOf (UserID)); 
得到一個錯誤例如,

然後注意:例如,"2.txt"與僅命名爲"2"的文件非常不同(值得一提的是因爲Windows默認隱藏文件擴展名)

如果你沒有給出文件的完整路徑,那麼該文件必須在你的「classpath」中,如果你不明白,最好給文件的完整路徑。

0

FileNotFound在比較後不會被拋出,而是在FileReader創建時被拋出。 FileReader告訴你沒有文件命名爲這樣。既然你說你創建了這個文件,可以有幾個解釋:

  • 也許你創建的文件位於錯誤的文件夾中。 java程序的默認文件夾是項目文件夾。確保你的文件在正確的文件夾中。否則,您可以將完整路徑作爲FileReader的參數:「/my/full/path/filename.extension」。
  • 它也可能是一個擴展問題。如果您使用Windows操作系統,則擴展名可能隱藏在文件資源管理器中。檢查是否存在這樣的擴展名(例如:「.txt」)

最終,您可以使用Java下的FileWriter打開文件,並嘗試在程序中創建該文件。您將會更輕鬆地看到Java試圖訪問哪個文件,這將幫助您識別您的問題。

0

由於您已經提到您需要創建與UserId關聯的文本文件,因此我建議在FileReaderTest class中添加".txt"。一些與此類似:

File input = new File (String.valueOf (UserID)+".txt"); 

,或者更方便

File input = new File (Integer.toString(UserID)+".txt"); 

我認爲這能解決您的查詢。