阅读文本文件的问题

时间:2011-01-27 09:30:10

标签: java string file

我有一个文本文件,其中我的名称和密码用以下分隔:。

user1:pwd1
user2:pwd2

在登录页面中,如果用户提供了正确的用户名和密码,它将引导您进入欢迎页面。但我没有得到这个。我得到的输出是

user1
pwd1
inside try
user1
pwd1
true
welcome user1
user2
pwd2
false
not equal

我的代码如下。

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.regex.*; 
import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern;


public class TextFile {

    /**
     * @param args
     */

    public void getNamePwd(String name, String pwd) {
        // TODO Auto-generated method stub
        System.out.println(name);
        System.out.println(pwd);
        String[] splitVals=null;
        try{
            System.out.println("inside try");
            String strLine;
            BufferedReader br = new BufferedReader(new FileReader("D:\\test\\text.txt"));
            while((strLine=br.readLine())!=null){
            splitVals=strLine.split(":");
            for(int i=0;i<splitVals.length;i=i+2){
            System.out.println(splitVals[i].toString());
            System.out.println(splitVals[i].toString());
            String nameUser=splitVals[i].toString();
            String passWord=splitVals[i+1].toString();
            System.out.println(name.equals(nameUser));
            if((name.equals(nameUser))&&(pwd.equals(passWord))){
                System.out.println("welcome"+name);
                }
            else{
                System.out.println("not equal");
            }
            }
            }
        }catch(Exception e){

        }
    }

}

请帮帮我..

4 个答案:

答案 0 :(得分:0)

我怀疑你想在找到一个用户名/密码后停止寻找用户名/密码匹配...要做到这一点,你必须在匹配时打破循环。为此,请执行以下操作:

readLoop:
while((strLine=br.readLine())!=null){

    // ...
    String[] splitVals = strLine.split(":");

    if((name.equals(nameUser))&&(pwd.equals(passWord))){
        System.out.println("welcome"+name);
        break readLoop;
    }

    // ...
}

此外,我不知道为什么你需要这个循环:

for(int i=0;i<splitVals.length;i=i+2)

回想一下,您逐行阅读文件 。也就是说,splitted数组将包含当前行的用户名和密码。

要打印用户名/密码,您可以执行以下操作:

System.out.printf("Username: %s, Password: %s%n", splitVals[0], splitVals[1]);

我可能会使用Scanner来解决它。像这样:

import java.io.*;
import java.util.Scanner;


public class TextFile {

    public static void main(String[] args) throws FileNotFoundException {

        if (userPassOk("hello", "world"))
            System.out.println("Welcome");
        else
            System.out.println("Get out!");
    }

    private static boolean userPassOk(String user, String pass)
            throws FileNotFoundException {

        Scanner s = new Scanner(new File("test.txt"));
        while (s.hasNextLine()) {
            String[] userPass = s.nextLine().split(":");
            if (userPass[0].equals(user) && userPass[1].equals(pass))
                return true;
        }
        return false;
    }
}

答案 1 :(得分:0)

尝试在try()

的末尾重置nameUser和passWord的值

,如

nameUser=""; passWord="";

答案 2 :(得分:0)

您的打印陈述错误。这就是你无法正确调试的原因。

您打印的内容与您使用的名称和密码不符。解决此问题并尝试再次打印出来。

for(int i=0;i<splitVals.length;i=i+2){
    System.out.println(splitVals[i].toString());
    System.out.println(splitVals[i].toString());
    String nameUser=splitVals[i].toString();
    String passWord=splitVals[i+1].toString();

但是,您不需要此循环。你可以使用:

        String nameUser=splitVals[0];
        String passWord=splitVals[1];

答案 3 :(得分:0)

如果您的条件满意则放弃。不允许继续循环。如果你把刹车放在这里。你得到了预期的输出。

if((name.equals(nameUser))&&(pwd.equals(passWord))){
                System.out.println("welcome"+name);
                  break;
                }