Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-将txt文件的部分添加到数组中_Java_Arrays_String_Csv - Fatal编程技术网

Java-将txt文件的部分添加到数组中

Java-将txt文件的部分添加到数组中,java,arrays,string,csv,Java,Arrays,String,Csv,我已经导入了一个.csv数据库文件,其中列出了程序的用户,以及其他形式的信息:用户名、密码、PropertyName、EstimatedValue 我已经知道如何获取用户名,但它只读取数据库中最后一个用户名,而不会读取其他用户名。非常感谢您的帮助 import java.util.*; import java.io.*; public class readCSV { String[] userData; public void checkLogin() throws IOEx

我已经导入了一个
.csv
数据库文件,其中列出了程序的用户,以及其他形式的信息:用户名、密码、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);
        }
    }


}

令人不快的是:

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);
    }
final List userData=newlinkedlist();
尝试
{
File File=新文件(“C:/Users/Sean/Documents/Programming assignment/Users.csv”);
BufferedReader bufRdr=新的BufferedReader(新文件读取器(文件));
字符串lineRead=bufRdr.readLine();
while(lineRead!=null)
{
this.userData.add(lineRead.split(“,”);
}
bufRdr.close();
}
捕获(异常er){
系统输出打印(er);
系统出口(0);
}
每次迭代都会替换/覆盖字符串[](userData),您必须将其存储在数组/集合中

List<String[]> list = new ArrayList<String[]>();
while((lineRead=bufRdr.readLine())!= null)
        {
            this.userData = lineRead.split(",");
            list.add(this.userData);
        }
        bufRdr.close();
你的线路

this.userData = lineRead.split(",");

每次迭代都会覆盖this.userData的值,结果是它只保留最后一次迭代的值。

问题是,在while循环中,您将字符串分配给同一个变量。。。因此,一旦您读取了整个文件。。该变量仅保存最后一个值

您需要做的是:

Vector<String> userData = new Vector<String>();

然后,稍后您可以拆分每个用户,并在此时执行附加处理。…

如果您想读取多个用户,则需要一个用户数据数组列表:
其中this.userData定义为

 ArrayList<UserData> userDataList;
当前代码循环遍历所有名称,但在每次迭代中覆盖值。
最后,只保留最后一个值。

您在
循环时覆盖了
中以前的值,因此只有最后一次迭代将保持永久性。好的,谢谢您的帮助jlordo如果您想存储每个用户的数据,
字符串[],是否可以通过使用for循环搜索lineRead字符串来纠正此问题
作为数据结构不是一个好的选择。我正打算将此添加到我的答案中。OP这是您的解决方案。@ShyJ,您可能必须在循环内调用readline(),否则它是一个无限循环。您最好使用ArrayList而不是LinkedList:所有显示都更快,迭代更方便。是的,我使用了ArrayList,谢谢您的帮助,我现在看到了我的错误。我该如何打印并返回该ArrayList?向量现在或多或少已经贬值,当然至少已经过时了。From:如果不需要线程安全的实现,建议使用ArrayList代替Vector。这会在add部分出现一个错误,称为“没有找到用于add的Sutable方法”很抱歉,我对java和编程一无所知。@user1323808缺少分号,请尝试用分号终止该行。。
userData.add(lineRead);
 ArrayList<UserData> userDataList;
 while(lineRead != null)
 {
      this.userDataList.add(lineRead.split(","));
      lineRead = bufRdr.readLine();
 }