Проблема в вашей логике.Вы сохраняете только astring[0]
в items
ArrayList и каждый раз перезаписываете значение description
.В результате последнее прочитанное значение сохраняется в description
, который вы печатаете в цикле.
Я предпочитаю создавать пользовательский класс следующим образом.(Просто для демонстрации, иначе вы бы объявили свои поля частными и предоставили методы получения и установки)
class MyObject {
public String code;
public String description;
public String price;
}
теперь вместо создания ArrayList of Strings вы создадите ArrayList of MyObject следующим образом
ArrayList<MyObject> items = new ArrayList<MyObject>();
теперь создайте новый экземпляр MyObject каждый раз, когда вы читаете строку, заполняете ее поля значениями из astring
следующим образом
ArrayList<MyObject> items = new ArrayList<MyObject>();
File fn = new File("test.txt");
String[] astring = new String[4];
try {
Scanner readFile = new Scanner(fn);
Scanner as = new Scanner(System.in);
MyObject myObject;
while (readFile.hasNext()) {
astring = readFile.nextLine().split(",");
myObject = new MyObject();
myObject.code = astring[0];
myObject.description = astring[1];
myObject.price = astring[2];
items.add(myObject);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
и затем, наконец, печатаете его, используя тот же цикл foreach, что иследует
for (MyObject item : items) {
System.out.println("The code is: " + item.code + " The description is: " + item.description + " The price is: " + item.price);
}
Вывод
The code is: code1 The description is: description1 The price is: price1
The code is: code2 The description is: description2 The price is: price2