使用扫描仪扫描txt文件

时间:2015-09-18 14:43:30

标签: java

  1. 我应该创建一个带有名称和密码的文本文件。 例如。彼得1212  约翰1234  玛丽0000 这些被称为名称和密码。

  2. 编写一个java程序,提示用户输入文件路径,名称和密码,并检查其是否有效。

  3. 如果名称和图钉正确,请打印出来"登录成功"如果失败"记录 失败"如果密码包含非数字字符,"密码 包含非数字字符"。这是我到目前为止所拥有的;

    import java.util.*;
    import java.io.*;
    public class PINCheck {
        public static void main(String[]args) {
    
            Scanner s = new Scanner(System.in); 
            System.out.print("Enter file path: ");
            String filepath = s.nextLine();
    
            File passwordFile = new File(filepath);
    
            System.out.print("Enter name: ");
            String name = s.nextLine();
    
            System.out.print("Enter password: ");
            String password = s.nextLine();
    
            if (password.matches(".*[a-zA-Z]+.*")) {
                System.out.println("You have entered a non-numerical PIN!");
            } else { try {
                    Scanner sc = new Scanner(passwordFile);
                    if (sc.hasNext(name) && sc.hasNext(password)) {
                        System.out.println("You have logged in successfully.");
                    }else {
                        System.out.println("Login Failed.");
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
             }
         }
    }
    
    1. 我能够编译我的代码并运行它,但即使我输入正确的名称和密码,我仍然登录失败。任何人都可以告诉我,如果我错误地使用hasNext? (我试过没有== true,它也没有按预期运行。)

2 个答案:

答案 0 :(得分:1)

  

扫描仪#hasNext(字符串模式)

这里String参数,pattern - 指定要扫描的模式的字符串,它与值不匹配。

您需要迭代文件内容,匹配用户名和&密码与内容。

Path path = Paths.get(filepath);
try(Stream<String> lines = Files.lines(path)){
    Optional<String> hasUser = lines.filter(s -> s.split(" ")[0].equals(name) && s.split(" ")[1].equals(passowrd)).findFirst();
    if(hasUser.isPresent()){
        System.out.println("You have logged in successfully.");
    }else {
        System.out.println("Login Failed.");
    }
}

答案 1 :(得分:0)

代码应为

import java.util.*;
import java.io.*;
public class PINCheck {
public static void main(String[]args) {

    Scanner s = new Scanner(System.in); 
    System.out.print("Enter file path: ");
    String filepath = s.nextLine();

    File passwordFile = new File(filepath);

    System.out.print("Enter name: ");
    String name = s.nextLine();

    System.out.print("Enter password: ");
    String password = s.nextLine();

    if (password.matches(".*[a-zA-Z]+.*")) {
        System.out.println("You have entered a non-numerical PIN!");
    } else { 
        try {
            Scanner sc = new Scanner(passwordFile);
            while (sc.hasNext()){
                String str = sc.nextLine();
                System.out.println("Str="+str);
                /*
                StringTokenizer st = new StringTokenizer(str);
                String uName = st.nextToken();
                String uPwd = st.nextToken();
                */
                String[] values = str.split(" ");
                System.out.println("uname:upwd:"+values[0]+":"+values[1]);
                if (name.equals(values[0]) &&  password.equals(values[1])) {
                    System.out.println("You have logged in successfully.");
                    break;
                }else {
                    System.out.println("Login Failed.");
                }               
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
 }
 }

 }

输出:

输入文件路径:data.txt

输入姓名:ravi

输入密码:1234

UNAME:upwd:拉维:1234

您已成功登录。

我的data.txt文件内容:ravi 1234

注意: ==比较变量的引用而不是变量的内容

您必须比较名称和&amp;来自名称&amp;的文件的密码从控制台输入的密码输入。它应该是“等于”比较,它不应该检查变量的引用。