从java代码文件使用arraylist登录?

从java代码文件使用arraylist登录?,java,arraylist,file-handling,Java,Arraylist,File Handling,我目前正在从事一个由我的老师分配给我的项目,我需要使用登录到我的系统的用户; 首先,用户注册数据存储在文件中使用arraylist(必须包括部分赋值)这部分工作正常我使用的代码是 ArrayList<data> regUser = new ArrayList<data>(); public void regUser() { String regName = JOptionPane.showInputDialog(null, "Enter User Name:")

我目前正在从事一个由我的老师分配给我的项目,我需要使用登录到我的系统的用户; 首先,用户注册数据存储在文件中使用arraylist(必须包括部分赋值)这部分工作正常我使用的代码是

ArrayList<data> regUser = new ArrayList<data>();

public void regUser() {
    String regName = JOptionPane.showInputDialog(null, "Enter User Name:");
    String regPass = JOptionPane.showInputDialog(null, "Enter User Password:");

    data p = new data(regName, regPass);
    regUser.add(p);

    for (int i = 0; i < regUser.size(); i++) {
        try {
            FileWriter writer = new FileWriter("C:\\Users\\Desktop\\outputFile.txt", true);
            PrintWriter pw = new PrintWriter(writer);
            pw.println(regUser.get(i));
            pw.close();
            writer.close();
        } catch (IOException e) {
            System.out.println("File not found");
        }
    }
    JOptionPane.showMessageDialog(null, "User registered successfully");
}
ArrayList regUser=new ArrayList();
公共无效调节器(){
字符串regName=JOptionPane.showInputDialog(null,“输入用户名:”);
字符串regPass=JOptionPane.showInputDialog(null,“输入用户密码:”);
数据p=新数据(regName,regPass);
规则添加(p);
对于(int i=0;i
现在用户必须以同样的方式从文件中的数据登录,首先将文件中的数据输入arraylist,然后将其与用户输入的数据进行匹配,但im有问题

public void login() {
    ArrayList<String> loginUser = new ArrayList<>();
    String name = JOptionPane.showInputDialog(null, "Enter User Name:");
    String password = JOptionPane.showInputDialog(null, "Enter User Password:");
    try {
        FileReader fr = new FileReader("C:\\Users\\Desktop\\outputFile.txt");
        BufferedReader br = new BufferedReader(fr);
        String st;
        while ((st = br.readLine()) != null) {
            loginUser.add(st);
        }
        // System.out.println(loginUser); 
        br.close();
        fr.close();
    } catch (IOException e) {
        System.out.println("File not found");
    }

    for (int i = 0; i < loginUser.size(); i++) {

        if (loginUser.get(0).equals(name) && loginUser.get(1).equals(password)) {// help need for find a condition here
            JOptionPane.showMessageDialog(null, "Welcome to Rent A Car");
            return;
        }
    }       
    JOptionPane.showMessageDialog(null, "Wrong login info please try again");
}
public void login(){
ArrayList loginUser=新建ArrayList();
String name=JOptionPane.showInputDialog(null,“输入用户名:”);
字符串密码=JOptionPane.showInputDialog(null,“输入用户密码:”);
试一试{
FileReader fr=新的FileReader(“C:\\Users\\Desktop\\outputFile.txt”);
BufferedReader br=新的BufferedReader(fr);
字符串st;
而((st=br.readLine())!=null){
添加(st);
}
//System.out.println(登录用户);
br.close();
fr.close();
}捕获(IOE异常){
System.out.println(“未找到文件”);
}
对于(int i=0;i
我在arraylist方面不是很在行,所以如果有人能给我一些指导的话,我会提前感谢你 my outputfile.txt中的数据目前为: 直升机123
test 456

您正确地从文件中获取了行,但是您必须分割行的各个部分,在这种情况下,按空格字符分割,以便可以分别获取用户的用户名和密码。首先,您可能希望在文本文件的每一行上都有用户名和密码,这样您就可以在
while
循环(例如
outputfile.txt
)中的每一行读取一个用户名和一个密码:

helo 123
test 456
我们假设这将始终按预期工作(=文件中的一行始终只包含用户名和密码,并用空格分隔)。在一个严肃的项目中,你绝对不应该假设这一点,你应该使用某种类型的数据存储

然后,您可以实现while循环中每一行的拆分,如下所示:

String[] credentials = st.split(" ");
凭证
将包含两个元素,即用户名和密码(例如凭证[0]=“helo”和凭证[1]=“123”)

然后,您可以在
while
循环中执行以下操作,将凭据添加到
数组列表中,然后匹配添加到列表中的字符串,无论它们是否匹配:

public void login()
    {
        ArrayList<String> loginUser=new ArrayList<>();
        String name = JOptionPane.showInputDialog(null, "Enter User Name:");
        String password = JOptionPane.showInputDialog(null, "Enter User Password:");
        try {
            FileReader fr=new FileReader("C:\\Users\\Desktop\\outputFile.txt");
            BufferedReader br=new BufferedReader(fr);
            String st;
            while ((st = br.readLine()) != null)
            {
                // This changed
                String[] credentials = st.split(" ");
                for (String credential : credentials) {
                    loginUser.add(credential);
                }
            }
            br.close();
            fr.close();
        }
        catch(IOException e)
        {
            System.out.println("File not found");
        }

        // This for block changed
        for (int i = 0; (i + 1) < loginUser.size(); i += 2) {
            String uname = loginUser.get(i);
            String pass = loginUser.get(i + 1);
            if (uname.equals(name) && pass.equals(password)) {
                JOptionPane.showMessageDialog(null, "Welcome to Rent A Car ");
                return;
            }
        }
        JOptionPane.showMessageDialog(null, "Wrong login info please try again");
    }
public void login()
{
ArrayList loginUser=新建ArrayList();
String name=JOptionPane.showInputDialog(null,“输入用户名:”);
字符串密码=JOptionPane.showInputDialog(null,“输入用户密码:”);
试一试{
FileReader fr=新的FileReader(“C:\\Users\\Desktop\\outputFile.txt”);
BufferedReader br=新的BufferedReader(fr);
字符串st;
而((st=br.readLine())!=null)
{
//这改变了
字符串[]凭证=st.split(“”);
用于(字符串凭据:凭据){
添加(凭证);
}
}
br.close();
fr.close();
}
捕获(IOE异常)
{
System.out.println(“未找到文件”);
}
//此块已更改
对于(int i=0;(i+1)
上面的代码假定您的用户名是文件中的第一组字符,密码是文件中的第二组字符,其中用户名和密码由空格字符分隔。
for
循环中的
i
增加2,因为0=用户名,1=密码;3=用户名,4=密码等。
(i+1)
是一种预防检查,用于验证是否存在接下来的2个元素(用户名和密码)

这是一个带有
ArrayList
的非常糟糕的代码,但是如果这是作业的必要条件,那就这样吧


希望这有帮助

login()
中的
for
循环替换为以下代码:

for (int i = 0; i < loginUser.size(); i++) {
    String[] credentials = loginUser.get(0).split(" ");
    if (credentials[0].equals(name) && credentials[1].equals(password)) {
        JOptionPane.showMessageDialog(null, "Welcome to Rent A Car");
        return;
    }
}
说明:当您从文件中读取一行时,它同时包含
名称
密码
的值,以
分隔。因此,您需要将该行分成两部分(索引
0
处的name值和索引
1
处的password值)

请随意评论
helo 123
test 456