我正在创建一个文件列表
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream("H:/temp/data.csv")));
try {
List<Item> items = new ArrayList<Item>();
Item item = new Item();
String line = null;
while ((line = reader.readLine()) != null) {
String[] split = line.split(",");
item.name = split[0];
item.quantity = Integer.valueOf(split[1]);
item.price = Double.valueOf(split[2]);
item.total = item.quantity * item.price;
items.add(item);
}
for (Item item2 : items) {
System.out.println("Item: " + item2.name);
}
} catch (IOException e) {
reader.close();
e.printStackTrace();
}
问题是列表显示文件中的最后一行作为所有项的值。
答案 0 :(得分:13)
您的代码的问题是您只创建了一个Item Object(Item item = new Item
)实例,并且同一个实例一次又一次地添加到列表中。
您需要为文件中的每一行创建Item
的新实例,并将其添加到列表中,如下所示。
修正:
List<Item> items = new ArrayList<Item>();
String line = null;
while ((line = reader.readLine()) != null) {
String[] split = line.split(",");
Item item = new Item(); // New Item is created for every line
item.name = split[0];
item.quantity = Integer.valueOf(split[1]);
item.price = Double.valueOf(split[2]);
item.total = item.quantity * item.price;
items.add(item);
}