java - 如何从输入文件中读取指定的字符串,然后读取其后面的下一个单词

标签 java passwords bufferedreader login-system

在 Java 中,我希望能够有两个接受 String 的 JTextField。一个是用户名,另一个是密码。要“登录”,程序将搜索文件 -->accounts.txt 并首先搜索“usrnm:”,一旦找到它,它就会在以下单词之后查找: 密码也是如此,但它搜索“pswrd:”。

这是我到目前为止所得到的:

    public void checkCredentials() {
    try {
        BufferedReader br = new BufferedReader(new FileReader(new File("accounts.txt")));
        String text = br.readLine();
        text = text.toLowerCase();
        text.split("usrnm:");
        System.out.println("username: " + userInput);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

感谢任何帮助!

最佳答案

我认为最好先保存用户名,然后在下一行保存密码,而不是搜索文件两次。当您阅读它们时,您可以创建具有以下属性(用户名和密码(字符串))的 User 对象。您也可以在系统处于 Activity 状态时将它们保存到链接列表中。这样您就可以轻松访问用户帐户。一旦用户需要登录,您将扫描列表并使用 userList.get(i).equals(textfield.getText()) 您将确定所询问的用户。之后,如果上述语句成立,您将检查 userList.get(i).getPassword().equals(textfield2.getText()) 是否为 true,并相应地授予或拒绝访问。

我在下面提供了一些有用的部分。

    public void readFromFile(String fileName, ListInterface<User> userList) {
        String oneLine, oneLine2;
        User user;
        try {
            /*
             * Create a FileWriter object that handles the low-level details of
             * reading
             */
            FileReader theFile = new FileReader(fileName);

            /*
             * Create a BufferedReader object to wrap around the FileWriter
             * object
             */
            /* This allows the use of high-level methods like readline */
            BufferedReader fileIn = new BufferedReader(theFile);

            /* Read the first line of the file */
            oneLine = fileIn.readLine();
            /*
             * Read the rest of the lines of the file and output them on the
             * screen
             */
            while (oneLine != null) /* A null string indicates the end of file */
            {
                oneLine2 = fileIn.readLine();
                user = new User(oneLine, oneLine2);
                oneLine = fileIn.readLine();
                userList.append(user);
            }

            /* Close the file so that it is no longer accessible to the program */
            fileIn.close();
        }

        /*
         * Handle the exception thrown by the FileReader constructor if file is
         * not found
         */
        catch (FileNotFoundException e) {
            System.out.println("Unable to locate the file: " + fileName);
        }

        /* Handle the exception thrown by the FileReader methods */
        catch (IOException e) {
            System.out.println("There was a problem reading the file: "
                    + fileName);
        }
    } /* End of method readFromFile */


    public void writeToFile(String fileName, ListInterface<User> userList) {
        try {
            /*
             * Create a FileWriter object that handles the low-level details of
             * writing
             */
            FileWriter theFile = new FileWriter(fileName);

            /* Create a PrintWriter object to wrap around the FileWriter object */
            /* This allows the use of high-level methods like println */
            PrintWriter fileOut = new PrintWriter(theFile);

            /* Print some lines to the file using the println method */
            for (int i = 1; i <= userList.size(); i++) {
                fileOut.println(userList.get(i).getUsername());
                fileOut.println(userList.get(i).getPassword());
            }
            /* Close the file so that it is no longer accessible to the program */
            fileOut.close();
        }

        /* Handle the exception thrown by the FileWriter methods */
        catch (IOException e) {
            System.out.println("Problem writing to the file");
        }
    } /* End of method writeToFile */
  • userList 是一个使用泛型的动态链表 (ListInterface<User>)

    如果你不想使用泛型,你可以只说ListInterface userList,无论它出现在哪里。

    • 您的 User 类应实现类似的方法并包含以下方法:
    public int compareTo(User user) {
    
    }
    
    public boolean equals(Object user) {
    
    }
    
    • 请注意,如果您不使用泛型,则可能需要类型转换。否则,您将收到编译错误。

关于java - 如何从输入文件中读取指定的字符串,然后读取其后面的下一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961522/

相关文章:

java - 如何按数字顺序获取文件夹中的文件名 | java

java - Liferay Service Builder - 创建引用

尽管 JavaFx 类存在于 JDK 中,但 Java 无法找到 JavaFx 类

r - 在 R 中加密密码 - 使用 RODBC 连接到 Oracle 数据库

java - try-with-resources- 不允许源级别低于 7,但我需要它在 6 下工作

java - 使用 BufferedReader 从文件中读取一组行

java : Unknown return ('L' ) type for boolean value

c# - 当我需要检索密码以供使用时安全地存储凭据

java - 如何在java中安全地存储用户密码以便在整个应用程序中重用

java - 我的应用程序卡在 mBufferIn.readLine() 上