Подскажите, что не так. В прошлой аналогичной задаче помогло то, что убрал лист. Но здесь лист нужен.
package com.javarush.task.task18.task1828;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws Exception {
if (args.length == 0 ) return ;
if (!args[0].equals("-d") && !args[0].equals("-u")) return;
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String fileName = r.readLine();
r.close();
BufferedReader reader = new BufferedReader(new FileReader(fileName)) ;
ArrayList<String> list = new ArrayList<>();
while (reader.ready()) {
list.add(reader.readLine());
}
reader.close();
String id = String.format("%-8.8s", args[1]);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).substring(0, 8).equals(id)) {
if (args[0].equals("-u")) {
String product = String.format("%-8.8d%-30.30s%-8.8s%-4.4s\n", id, args[2], args[3], args[4]);
list.set(i, product);
}
if (args[0].equals("-d")) {
list.remove(i);
i--;
}
}
}
if (list != null) {
FileWriter wr = new FileWriter(fileName, true);
for (int i = 0; i < list.size(); i++) {
wr.write(list.get(i)+"\n");
}
wr.close();
}
}
}
/*
String productName = args[1];
if (args[1].length() > 30)
productName = args[1].substring(0, 30);
String price = args[2];
if (args[2].length() > 8)
price = args[2].substring(0, 8);
String q = args[3];
if (args[3].length() > 4)
q = args[3].substring(0, 4);
*/
то стоит задуматься о том, что ограничение в 30 символов на название - это куча потенциальных проблем- пожалуйста. Но с точки зрения целесообразности и эффективности это очень сомнительно. Полезно бывает представить, как это могло бы быть в реальном проекте. Но умение отделять нужное от ненужного, на мой взгляд, будет важнее.