![](/img/trans.png)
[英]Read in a text file 1 line at a time and split the words into an Array Java
[英]read from a file, split the line and store in an array JAVA
好的,首先,我要说的是,在JAVA编程方面,我是新手。 我正在自学,因此请您随心所欲,因为我会尽我所能尽我所能。 话虽如此,这是我的困境!!!
我有一个文件“ 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。 简单的用户名和密码字段。 当用户单击登录按钮时,我希望它从文件中提取信息,检查用户名,然后验证其密码。 同样,这部分是全局图,但只是想让您知道它的用途。
另外,请记住,我没有经验,如果您发布代码,请不要使用相似但不同的东西,因为这会使我更加困惑。
我认为您的数组没有增长,因为您要重新声明文件的每一行(在while
循环中)。 要解决此问题,您可以在循环之前初始化数组,然后使用System.arraycopy
使其增长。
在此快速修复中,我认为您的想法有很多问题:
我在这里简化一下,有很多有关此的文献。
祝你好运!
通常,人们为此使用ArrayList,就像与Array并置一样。 数组需要知道元素的总数,而arraylist使用下面的数组并在必要时动态调整大小(当然,创建更大的数组并复制数据)。
对于特定情况,您实际上需要一个具有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);
获取存储的密码,并与用户提供的密码进行比较。
在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.