试图让我的程序读取java中的文件

时间:2014-10-23 02:10:31

标签: java bufferedreader

我正在尝试让我的代码读取文本输入并将其与“userInfo.txt”文件中的文本进行比较。 我想我做到了这一点;但是,它不输出比较结果。

请检查下面的代码:

String line = "";
String data = "";
boolean result = false;

BufferedReader inFile = new BufferedReader (new FileReader ("userInfo.txt"));
try{
  while((line = inFile.readLine()) != null)
    data += "\n" + line;
  inFile.close();
}  catch(Exception x){};

String [] allData = {data}; // saving the txt inside allData

System.out.println("Enter UserName: ");
 String userName = kb.nextLine(); 

System.out.println("Enter Password: ");
 String pass = kb.nextLine();

try{
  //read user name and password then compairing it to the user and pass insde the file
  for(int i = 0; i < allData.length - 1; i++)
  {// checking userName

    if(allData[i].equalsIgnoreCase(userName))
      result = true;
    else
      System.out.println(result +" Wrong userName");

    // checking password

    if(allData[i + 1].equals(pass))
      System.out.println("Welcome " + userName);
    else
      System.out.println( result +" Wrong password");
  }
} catch (Exception x){};

2 个答案:

答案 0 :(得分:1)

因为您的数组allData只包含1个字符串,这是您的txt文件的全部内容。

更改

String [] allData = {data};

String [] allData = data.Split("\\n");

答案 1 :(得分:0)

我认为问题是在这一行上创建的:

String [] allData = {data}; 

在该行中,您将创建一个包含单个元素的数组,该元素包含文件的整个文本。

相反,请考虑做这样的事情:

List<String> allData = new ArrayList<String>();
try{
  while((line = inFile.readLine()) != null) {
    allData.append(line);
  }
}  catch(Exception x){}
finally { 
  inFile.close(); 
}

然后您可以使用allData.get(i)来获取您正在寻找的行。

顺便说一下,代码审查的几个注释:

  1. 始终使用{}代替ifwhile等。这样可以让您更轻松地阅读,也不太可能在以后出现错误,以确定某些内容是否会被执行块的一部分与否。
  2. 不要吞下例外(catch(Exception e) {})。它会使调试变得更加困难,因为你不知道自己是犯了错误还是输入错误。
  3. inFile.close()属于finally块。这是因为你想要关闭你的文件句柄,即使你得到一个导致你突破try块的异常。