我导入了一个.csv
数据库文件,其中列出了该程序的用户以及表单中的其他信息:UserName,Password,PropertyName,EstimatedValue。
我已经想过如何获取用户名,但它只会读取数据库中的最后一个用户名,而不会读取其他用户名。非常感谢帮助。
import java.util.*;
import java.io.*;
public class readCSV
{
String[] userData;
public void checkLogin() throws IOException
{
try
{
File file = new File("C:/Users/Sean/Documents/Programming assigment/Users.csv");
BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String lineRead = bufRdr.readLine();
while(lineRead != null)
{
this.userData = lineRead.split(",");
lineRead = bufRdr.readLine();
}
bufRdr.close();
}
catch(Exception er){
System.out.print(er);
System.exit(0);
}
}
}
答案 0 :(得分:5)
违规行是:
this.userData = lineRead.split(",");
你应该将它放入一些集合中,例如一个清单
final List<String[]> userData = new LinkedList<String[]> ();
try
{
File file = new File("C:/Users/Sean/Documents/Programming assigment/Users.csv");
BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String lineRead = bufRdr.readLine();
while(lineRead != null)
{
this.userData.add (lineRead.split(","));
}
bufRdr.close();
}
catch(Exception er){
System.out.print(er);
System.exit(0);
}
答案 1 :(得分:2)
你的路线;
this.userData = lineRead.split(",");
每次迭代都会覆盖this.userData
的值,结果是它只保留最后一次迭代的值。
答案 2 :(得分:1)
你的String [](userData)在每次迭代时被替换/覆盖,你必须将它们存储在数组/集合中。
List<String[]> list = new ArrayList<String[]>();
while((lineRead=bufRdr.readLine())!= null)
{
this.userData = lineRead.split(",");
list.add(this.userData);
}
bufRdr.close();
打印内容:
for(String[] str : list){
for(String s: str){
System.out.pritnln(s);
}
}
答案 3 :(得分:1)
如果你想阅读许多用户,你需要一个userdata的ArrayList:
其中this.userData定义为
ArrayList<UserData> userDataList;
并在你的循环中:
while(lineRead != null)
{
this.userDataList.add(lineRead.split(","));
lineRead = bufRdr.readLine();
}
您当前的代码遍历所有名称,但会覆盖每次迭代中的值。 最后只保留最后一个值。
答案 4 :(得分:0)
问题在于,在while循环中,您将字符串分配给同一个变量...所以一旦读完整个文件,该变量只保留最后一个值。
您需要做的是:
Vector<String> userData = new Vector<String>();
然后在你的循环......
userData.add(lineRead);
然后您可以拆分每一个并在那时进行额外处理....