繁体   English   中英

从文件中读取,分割线并存储在数组JAVA中

[英]read from a file, split the line and store in an array JAVA

好的,首先,我要说的是,在JAVA编程方面,我是新手。 我正在自学,因此请您随心所欲,因为我会尽我所能尽我所能。 话虽如此,这是我的困境!!!

我有一个文件“ Users.csv”,用于存储用户名和密码字段。

username,password
josh,123456ABC
bman,turtlestew123
etc...

我想做的是...

  1. 阅读此文档(Users.csv)中的行(与类文件位于同一目录中)
  2. 使用.split(“,”);分割行 在输入上
  3. 将拆分1存储在数组[0]中,将拆分2存储在同一数组[1]中

当我将用户添加到文件时,阵列必须能够增长。 最终,我将要验证阵列中的信息,但是现在我主要关心的是如何甚至将信息放入阵列中。 这是我在玩的东西,但我不知道如何使其按我的意愿去做...

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class BufferedReaderExample {

    public static void main(String[] args) {

        try (BufferedReader br = new BufferedReader(new FileReader("Users.csv")))
        {

            String sCurrentLine;
            String first = "Username is: ";
            String second = "Password is: ";

            while ((sCurrentLine = br.readLine()) != null) {


                String[] information = sCurrentLine.split(",");
                String username = information[0];
                String password = information[1];
                System.out.println(username);
                System.out.println(password);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } 

    }
}

这段代码将读取行,并将其拆分并输出到屏幕上……但是它没有将它们存储在数组中,因此我无法使用数组来查找特定元素。

这是用于登录GUI。 简单的用户名和密码字段。 当用户单击登录按钮时,我希望它从文件中提取信息,检查用户名,然后验证其密码。 同样,这部分是全局图,但只是想让您知道它的用途。

另外,请记住,我没有经验,如果您发布代码,请不要使用相似但不同的东西,因为这会使我更加困惑。

我认为您的数组没有增长,因为您要重新声明文件的每一行(在while循环中)。 要解决此问题,您可以在循环之前初始化数组,然后使用System.arraycopy使其增长。

在此快速修复中,我认为您的想法有很多问题:

  • 用户名和密码不应存储在csv文件中,而应存储在数据库中
  • 密码应该是散列的,并且永远不会从应用程序本身清晰可见
  • 数据库应该加盐
  • 数组不是代表键值对的正确数据结构-您应该为此使用Map
  • 在这种情况下,获取内存中的所有用户名/密码以将其与用户登录名进行比较是不合理的。 您应该对用户提供的密码进行哈希处理,在数据库中找到用户名,然后比较两个哈希

我在这里简化一下,有很多有关此的文献。

祝你好运!

通常,人们为此使用ArrayList,就像与Array并置一样。 数组需要知道元素的总数,而arraylist使用下面的数组并在必要时动态调整大小(当然,创建更大的数组并复制数据)。

对于特定情况,您实际上需要一个具有keyvalue哈希图

   import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

public class BufferedReaderExample {

public static void main(String[] args) {



           try (BufferedReader br = new BufferedReader(new FileReader("Users.csv")))
            {

                String sCurrentLine;
                String first = "Username is: ";
                String second = "Password is: ";
                java.util.HashMap<String,String> data = new java.util.HashMap<String,String>();


                while ((sCurrentLine = br.readLine()) != null) {       
                    String[] information = sCurrentLine.split(",");
                    String username = information[0];
                    String password = information[1];
                    System.out.println(username);
                    System.out.println(password);
                    data.put(username,password);
                    }

            } catch (IOException e) {
                e.printStackTrace();
            } 

        }
    }

登录后,您可以使用data.get(username); 获取存储的密码,并与用户提供的密码进行比较。

在try / catch语句之外声明数组:

    String[] information;
    try (BufferedReader br = new BufferedReader(new FileReader("Users.csv")))
    {

        String sCurrentLine;
        String first = "Username is: ";
        String second = "Password is: ";

        while ((sCurrentLine = br.readLine()) != null) {


            information = sCurrentLine.split(",");
            String username = information[0];
            String password = information[1];
            System.out.println(username);
            System.out.println(password);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

然后,您将可以使用在其他地方生成的数据。

如果要自动递增数组,请使用ArrayList 这些是特殊的数据结构,随着项目的添加而增加。

我建议您创建一个User POJO类 ,因为明天,如果将更多属性添加到CSV行中,则可以通过在下面的类中添加一个字段来采用该属性

class User {

   private String userName;
   private String password;
   //getter :setters

}

并在解析文件时使用ArrayList

List<User> userList = new ArrayList<User>();
try (BufferedReader br = new BufferedReader(new FileReader("Users.csv")))
        {

            String sCurrentLine;
            String first = "Username is: ";
            String second = "Password is: ";

            while ((sCurrentLine = br.readLine()) != null) {


                String[] information = sCurrentLine.split(",");
                String username = information[0];
                String password = information[1];

                User u = new User(); 
                u.setUserName(username);
                u.setPassword(password);
                userList.add(u);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } 
}

还:将用户密码存储在csv文件中会带来安全风险。 尝试使用数据库并存储加密的密码,而不是实际的密码(同时检索只是解密密码并进行比较)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM