Первая проблема: в список list добавляются строки переноса "\n" как отдельный элемент.
Вторая: при считывание с файла кириллицы, считывается � такой символ.
Считывать мне нужно именно построчно
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
if (!(args.length == 0)) {
if (args[0].equals("-d")) {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
ArrayList<String> list = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
list.add(line);
}
for (String elem : list) {
String subStr = elem.substring(0, 8).trim();
if (subStr.equals(args[1])) {
list.remove(elem);
break;
}
}
FileOutputStream outputStream = new FileOutputStream(fileName);
for (String elem : list) {
String toPrint = elem + "\n" + "\r";
outputStream.write(toPrint.getBytes());
}
outputStream.close();
}
else if (args[0].equals("-u")) {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
ArrayList<String> list = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
list.add(line);
}
reader.close();
for (String elem : list) {
String subElem = elem.substring(0, 8).trim();
if (Integer.parseInt(subElem) == Integer.parseInt(args[1])) {
String goods = elem.substring(0, 8);
goods = goods + args[2];
for (int i = goods.length(); i < 38; i++) {
goods = goods + " ";
}
goods = goods + args[3];
for (int i = goods.length(); i < 46; i++) {
goods = goods + " ";
}
goods = goods + args[4];
for (int i = goods.length(); i < 50; i++) {
goods = goods + " ";
}
elem = goods;
break;
}
}
FileWriter fw = new FileWriter(fileName, false);
for (String elem : list) {
fw.write(elem + "\n");
}
fw.close();
}
}
}
}