Я должен записывать в файл каждый раз, когда в него вносятся изменения, т.е. кто-то меняет количество или что-то в этом роде. Выбранный мною метод заполняет ArrayList элементами, создает их в классы и затем возвращает их обратно в текстовый файл с внесенными изменениями.
public void readStock() {
Scanner scanner = null;
try {
File input = new File("Stock.txt");
scanner = new Scanner(input);
Mouse mouse = null;
Keyboard keyboard = null;
while (scanner.hasNextLine()) {
String[] info = scanner.nextLine().split(",");
//System.out.println(Connectivity.valueOf(info[5].trim().toUpperCase()) instanceof Connectivity);
if (info[1].trim().equals("mouse")) {
mouse = new Mouse(Integer.parseInt(info[0].trim()),
info[3].trim(), info[4].trim(),
Connectivity.valueOf(info[5].trim().toUpperCase()),
Double.parseDouble(info[6].trim()),
Double.parseDouble(info[7].trim()),
Integer.parseInt(info[6].trim()),
Integer.parseInt(info[9].trim()),
MouseType.valueOf(info[2].trim().toUpperCase()));
productList.add(mouse);
} else {
keyboard = new Keyboard(Integer.parseInt(info[0].trim()),
info[3].trim(), info[4].trim(),
Connectivity.valueOf(info[5].trim().toUpperCase()),
Double.parseDouble(info[6].trim()),
Double.parseDouble(info[7].trim()),
Integer.parseInt(info[6].trim()),
KeyboardType.valueOf(info[2].trim().toUpperCase()),
KeyboardLayout.valueOf(info[9].trim().toUpperCase()));
productList.add(keyboard);
}
Он отлично работает с данными по умолчанию, но когда я решаю добавить дополнительный элемент, он все портит.
public void addStock() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("Stock.txt"));
int max = productList.size();
for(int i = 0; i < max-2; i++) {
bw.write(productList.get(i).toString() + "\n");
}
bw.write(productList.get(max-1).toString());
} catch(IOException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
finally {
try {
if(bw != null) {
bw.close();
}
} catch(IOException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
и ошибка, которую он мне дает:
java.lang.NumberFormatException: For input string: "15.0"
For input string: "15.0"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Reader.readStock(Reader.java:42)
at MainTest.main(MainTest.java:48)
И содержимое текстового файла:
112233, mouse, GAMING, Logitech, black, WIRELESS, 15.0, 7.5, 15, 3
123456, keyboard, Corsair, black, WIRED, 2.0, 30.0, 2, GAMING, UK
124455, keyboard, Advent, white, WIRED, 10.0, 3.5, 10, STANDARD, UK
124566, mouse, STANDARD, Advent, grey, WIRED, 15.0, 2.5, 15, 2
125567, keyboard, Logitech, black, WIRELESS, 4.0, 25.99, 4, INTERNET, US
221101, mouse, STANDARD, Logitech, black, WIRED, 3.0, 3.0, 3, 3
221122, mouse, GAMING, Razer, black, WIRED, 1.0, 28.0, 1, 7
223044, mouse, GAMING, Anker, blue, WIRED, 3.0, 16.0, 3, 10
234555, keyboard, Apple, white, WIRELESS, 10.0, 75.5, 10, STANDARD, US
235066, keyboard, Microsoft, black, WIRELESS, 5.0, 45.5, 5, FLEXIBLE, UK
236677, mouse, STANDARD, Asus, blue, WIRELESS, 8.0, 10.0, 7, 5
237788, keyboard, Logitech, grey, WIRED, 15.0, 6.5, 15, STANDARD, UK