Вроде работает...
package com.javarush.task.task18.task1828;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
ArrayList<String> lines = new ArrayList<>();
if (args.length != 0) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
reader.close();
reader = new BufferedReader(new FileReader(file));
while (reader.ready()) {
lines.add(reader.readLine());
}
// System.out.println(lines);
reader.close();
// String s = "-u";
if (args[0].equals("-u")) {
update(args[1], args[2], Double.parseDouble(args[3]), Integer.parseInt(args[4]), lines);
} else if (args[0].equals("-d")) {
delete(args[2], lines);
}
FileOutputStream fos = new FileOutputStream(file);
for (String line : lines) fos.write((line + "\n").getBytes(StandardCharsets.UTF_8));
// if (s.equals("-u")) {
// update(String.valueOf(198479), "Шорты", Double.parseDouble("164.3"), Integer.parseInt("20"));
// for (String line : lines) fos.write((line + "\n").getBytes(StandardCharsets.UTF_8));
// } else if (s.equals("-d")) {
// delete(String.valueOf(19847983));
// for (String line : lines) fos.write((line + "\n").getBytes(StandardCharsets.UTF_8));
// }
//
// System.out.println(lines);
fos.close();
}
}
private static void update(String id, String name, double price, int quantity, ArrayList<String> lines) {
lines.set(searchId(id, lines), setLimit(id, 8) + setLimit(name, 30) + setLimit(String.valueOf(price), 8) + setLimit(String.valueOf(quantity), 4).trim());
}
private static void delete(String id, ArrayList<String> lines) {
lines.remove(searchId(id, lines));
}
private static String setLimit(String str, int limit) {
String limitedStr = str;
if (str.length() < limit) {
for (int i = str.length(); i < limit; i++) {
limitedStr += " ";
}
} else if (str.length() > limit) {
limitedStr = str.substring(0, limit);
}
return limitedStr;
}
private static int searchId(String id, ArrayList<String> lines) {
int index = 0;
for (String string : lines) {
if (string.substring(0, 8).trim().equals(id))
index = lines.indexOf(string);
}
return index;
}
}
idвсегда длинной 8 символов. Вы сравниваете обрезанныйid, с дополненным до максимальной длины аргументом (не обрезанным). P.S. При выводе в файлquantity, имхо, тоже обрезать не стоит.