gpt4 book ai didi

java - 将单个 csv 对象存储到数组中

转载 作者:行者123 更新时间:2023-11-29 07:53:21 26 4
gpt4 key购买 nike

嘿,我得到了一段代码,它应该将 csv 文件的行加载到一个对象数组中:

public static WarehouseItem[] loadRecords(WarehouseItem[] records) {
FileInputStream fileStrm = null;
InputStreamReader rdr;
BufferedReader bufRdr;
int numRows = 0;
String warehouseItem;
String filename;

filename = ConsoleInput.readLine("Please enter the filename (DataMillion.csv OR DataThousand.csv)");

try {
fileStrm = new FileInputStream(filename);
rdr = new InputStreamReader(fileStrm);
bufRdr = new BufferedReader(rdr);

warehouseItem = bufRdr.readLine();
records[numRows] = new WarehouseItem(warehouseItem); //NULL POINTER EXCEPTION HERE
System.out.println(records[0].toString(records[0].columnVals));
while (warehouseItem != null) {
numRows++;
records[numRows] = new WarehouseItem(warehouseItem);
warehouseItem = bufRdr.readLine();
}
fileStrm.close();
}

catch (IOException e) {
if (fileStrm != null) {
try {
fileStrm.close();
} catch (IOException ex2) {}
}
System.out.println("Error in file processing: " + e.getMessage());
}
main(null);
return records;
}

但是当我运行它时,我得到了一个 NullPointerException

records[numRows] = new WarehouseItem(warehouseItem);

有什么我遗漏的吗??

这里是 WarehouseItem 构造函数 + toString:

public class WarehouseItem {
String[] columnVals;
int numColumns = 5;

public WarehouseItem(String warehouseItem) {
String key, brand, model, price, weightInKG;
int intWeightInKG;
double doublePrice;
StringTokenizer strTok;

strTok = new StringTokenizer(warehouseItem, ",");
key = strTok.nextToken();
brand = strTok.nextToken();
model = strTok.nextToken();
intWeightInKG = Integer.parseInt(strTok.nextToken());
doublePrice = Double.valueOf(strTok.nextToken());

weightInKG = String.valueOf(intWeightInKG);
price = String.valueOf(doublePrice);
String[] columnVals = {key, brand, model, weightInKG, price};

if(columnVals.length != 5)
throw new IllegalStateException("Invalid CSV: not enough columns");
}

public String toString(String[] columnVals) {
return ("Key: " + columnVals[0] + "\n" +
"Brand: " + columnVals[1] + "\n" +
"Model: " + columnVals[2] + "\n" +
"Weight: " + columnVals[3] + "\n" + " kg" +
"Price: " + "$" + columnVals[4] + "\n");
}
}

我的问题是值没有正确存储到数组记录中,我不确定为什么

最佳答案

您没有初始化数组,这是您代码中的 NullPointerException 原因,但如果您不能使用数组,请不要使用它。

行数可能超过数组的容量,请改用List

List<WarehouseItem> records = new ArrayList<>();

String line = bufRdr.readLine();
while (line != null) {
WarehauseItem warehauseItem = new WarehauseItem();
records.add(warehauseItem);
warehauseItem.processLine(line);
line = bufRdr.readLine();
}
numRows = records.size();

关于java - 将单个 csv 对象存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com