Уже перепробовал все варианты, просто пишет, что какие-то неизвестные потоки не закрыты, хотя для всех прописан close(). И в чем я не прав?
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.Arrays;
import java.util.Collections;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
private static final List<Integer> paramsLength = new ArrayList<>();
static {
Collections.addAll(paramsLength, 8, 30, 8, 4);
}
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
if (args.length != 0) {
ArrayList<String> argsList = new ArrayList<>(Arrays.asList(args));
argsList.remove(0);
FileReader fileReader = new FileReader(fileName);
char[] ids = new char[8];
List<Integer> idList = new ArrayList<>();
while (fileReader.read(ids) > 0) {
idList.add(Integer.parseInt(String.valueOf(ids).trim()));
fileReader.skip(43);
}
fileReader.close();
FileWriter fileWriter;
switch (args[0]) {
case "-c":
String strId;
if (idList.size() == 0) {
fileWriter = new FileWriter(fileName);
strId = String.valueOf(19846);
} else {
fileWriter = new FileWriter(fileName, true);
strId = String.valueOf(Collections.max(idList) + 1);
}
argsList.add(0, strId);
fileWriter.write(getFormattedString(argsList) + "\n");
fileWriter.close();
break;
case "-u":
case "-d":
int id = Integer.parseInt(args[1]);
if (idList.contains(id)) {
fileReader = new FileReader(fileName);
List<String> stringList = new ArrayList<>();
char[] buff = new char[51];
while (fileReader.read(buff) > 0){
stringList.add(String.valueOf(buff));
}
fileReader.close();
fileWriter = new FileWriter(fileName);
if (args[0].equals("-u")) {
stringList.set(idList.indexOf(id), getFormattedString(argsList) + "\n");
} else {
stringList.remove(idList.indexOf(id));
}
for (String str : stringList) {
fileWriter.write(str);
}
fileWriter.close();
}
}
}
}
public static String getFormattedString(List<String> list) {
StringBuilder strBuild = new StringBuilder();
for (int i = 0; i < paramsLength.size(); i++) {
StringBuilder strBuildFor = new StringBuilder(list.get(i));
int diff = paramsLength.get(i) - list.get(i).length();
if (diff < 0) {
strBuildFor.delete(paramsLength.get(i), list.get(i).length());
} else {
for (int j = 0; j < Math.abs(diff); j++) {
strBuildFor.append(" ");
}
}
strBuild.append(strBuildFor);
}
return strBuild.toString();
}
}