需要从文件创建对象并将其放入数组中

时间:2017-10-12 07:35:28

标签: java arrays file text

我正在尝试为每行文本创建一个对象,并在创建每个对象时将其放入数组中。我正在努力将它放入阵列中。这是我的代码:

    File inFile = new File("shareholders.txt");
    Scanner inputFile = new Scanner(inFile);
    String str;
    Shareholder shareholder = new Shareholder();

    while (inputFile.hasNext()) {

        str = inputFile.nextLine();
        String tokens[] = str.split(",");
        shareholder.setID(tokens[0]);
        shareholder.setName(tokens[1]);
        shareholder.setAddress(tokens[2]);
        shareholder.setPortfolioID(tokens[3]);

    }

3 个答案:

答案 0 :(得分:1)

我认为股东对象列表可能在这里最有意义:

File inFile = new File("shareholders.txt");
Scanner inputFile = new Scanner(inFile);
String str;
List<Shareholder> list = new ArrayList<>();

while (inputFile.hasNext()) {
    Shareholder shareholder = new Shareholder();
    str = inputFile.nextLine();
    String tokens[] = str.split(",");
    shareholder.setID(tokens[0]);
    shareholder.setName(tokens[1]);
    shareholder.setAddress(tokens[2]);
    shareholder.setPortfolioID(tokens[3]);

    list.add(shareholder);
}

列表在这里有意义的原因是因为您可能不知道输入文件中有多少股东。因此,在这种情况下,阵列可能无法正常工作(即使股东数量得到修复,它可能会在以后更改)。

答案 1 :(得分:1)

如果您有固定数量的股东,您可以这样做 -

  File inFile = new File("shareholders.txt");
    Scanner inputFile = new Scanner(inFile);
    String str;
    int i=0;
    Shareholder[] shareholder = new Shareholder[n];

    while (inputFile.hasNext()) {
        str = inputFile.nextLine();
        String tokens[] = str.split(",");
        shareholder[i++] = new Shareholder(tokens[0],tokens[1],tokens[2],tokens[3]);
    }

或者如果不知道股东人数,那么你可以使用list -

File inFile = new File("shareholders.txt");
Scanner inputFile = new Scanner(inFile);
String str;
List<Shareholder> list = new ArrayList<>();

while (inputFile.hasNext()) {
    Shareholder shareholder = new Shareholder();
    str = inputFile.nextLine();
    String tokens[] = str.split(",");
    list.add(new Shareholder(tokens[0],tokens[1],tokens[2],tokens[3]));
}

答案 2 :(得分:0)

在阅读文件之前,您无法知道文件有多少行。 有关行数的信息对于使用特定大小初始化数组很重要,否则您需要通过创建一个更大的新数组来多次扩展数组。这是不好的做法和糟糕的表现。

但是不使用数组本身,而是使用arraylist以便于使用,只需返回一个简单数组,该数组可以从您使用的arraylist中接收。

我建议作为此问题的解决方案如下。请注意,以下代码不是100%完整,并且不会在其状态下运行。完成它并让它运行是你的工作。

public void readFileIntoArray(String filename, Shareholder[] targetArray)
{
    File sourceFile = new File(filename);
    // Read in the file to determine the number of lines (int numberOfLines)
    ArrayList<Shareholder> lines = new ArrayList<>(numberOfLines);

    Shareholder sh;
    while(file.hasNext())
    {
        sh = new Shareholder();
        //Parse data into Shareholderobject
        lines.add(sh);
    }
    return lines.toArray();
}