将文件字符串数组从文件传递到对象数组

时间:2018-05-19 12:38:04

标签: java arrays

我会尽量保持简洁,只在需要时提供更多代码。我在第26行GMIstock[count].setName(values[0]);得到一个空指针异常。 setName()方法只是设置一个字符串。最初我从另一个类传递了数组,但我认为这可能是我的问题的根源,并从这个类中重新制作了数组。它传入values[0 through 2]就好了但是试图将它从values[0]传递到Product[count]中的字符串会导致眼泪。我在这里缺少什么?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Global_Inventory_Management {

String fileName = "src/data.csv";
File file = new File(fileName);
private Product[] GMIstock;

public void readStock() {

    try {

        Scanner reader = new Scanner(file);
        reader.next(); //ignore first line
        int count = 0; // I would use a for loop but the file could have values for any number of Products
        while(reader.hasNext()) {

            String data = reader.next();
            String[] values = data.split(",");
            System.out.println(values[0]);
            System.out.println(values[1]);
            System.out.println(values[2]);

            //runs fine till right here
            GMIstock[count].setName(values[0]); //sets name of type String in Product
            GMIstock[count].setQuantity(Integer.parseInt(values[1]));
            GMIstock[count].setPrice(Double.parseDouble(values[2]));
            count++;
            System.out.println(GMIstock[count].getName());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }       
}}

1 个答案:

答案 0 :(得分:0)

您需要初始化GMIstock。如果您使用的是Java 8+,请在扫描程序初始化之前添加以下内容。

int fileSize = Files.lines( Paths.get( fileName ) ).count();
GMIstock = new Product[ fileSize ];

修改

您还需要在循环文件行时初始化产品。在循环中调用Product setter之前,请添加以下内容。

GMIstock[ count ] = new Product(); // I'm assuming this constructor is valid.