好的家伙首先让我说在JAVA编程时我是一个NOVICE。我正在自学,所以请说,请耐心等待,因为我尽我所能,尽我所能。话虽如此,这是我的困境!!!
我有一个存储用户名和密码字段的文件“Users.csv”。
username,password
josh,123456ABC
bman,turtlestew123
etc...
我想做的是......
当我将用户添加到文件时,数组必须能够增长。最终我想验证数组中的信息,但我现在主要关注的是如何将信息输入到数组中。这是我正在玩的东西,但我不知道如何让它做我想做的......
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。简单的用户名和密码字段。当人员点击登录按钮时,我希望它从文件中提取信息,检查用户名,然后验证他们的密码。同样,这部分是全局,但只是想让你知道它的用途。
此外,请记住,我是非常缺乏经验,如果你发布代码,请不要使用类似但不同的东西,因为这会让我更加困惑。
答案 0 :(得分:3)
我认为你的数组没有增长,因为你正在重新声明文件的每一行(它在while
循环中)。
要解决此问题,您可以在循环之前初始化数组,并使用System.arraycopy
使其增长。
这个快速解决方案的一部分,我认为你的想法有很多问题:
我在这里简化了一下,有大量关于此的文献。
祝你好运!
答案 1 :(得分:1)
通常人们使用ArrayList作为数组。 需要知道元素总数的数组,而arraylist使用下面的数组并在必要时动态调整大小(好吧,创建一个更大的数组并复制数据)。
对于特定情况,您实际上需要一个 hashmap ,它需要key
和value
。
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);
获取存储的密码,并与用户提供的密码进行比较。
答案 2 :(得分:0)
在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();
}
然后,您将能够使用其他地方生成的数据。
答案 3 :(得分:0)
如果您想要自动增量数组,请使用ArrayList。这些是特殊的数据结构,随着项目的添加而增加。
我建议您创建一个User
POJO class,因为明天,如果将另外一个属性添加到CSV行,可以通过在下面的类中添加一个字段来采用它/ p>
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文件中存在安全风险。尝试使用数据库并存储加密的密码而不是实际的密码(检索时只需解密密码并进行比较)