Я с этими двумя задачами задолбался бороться с валидатором.
Код работает, но что-то ему не нравится.
Поток чтения не закрыт видите ли...
Выкладываю код сюда, кто найдет ошибки - буду признателен, а сам копирую решение из ответа и иду дальше.
Я пришел сюда учиться, а не с роботами @?#$ться =)))
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
if (args.length > 0) {
if (args[0].equals("-d")) makeDeal(0, args);
else if (args[0].equals("-u")) makeDeal(1, args);
}
}
public static void update(BufferedReader reader, ArrayList<String> list, String id, String[] args) throws IOException {
while (reader.ready()) {
String s = reader.readLine();
if (!s.startsWith(id)) list.add(s);
else {
StringBuilder sb = new StringBuilder(s.substring(0, 8));
sb.append(makeSubLine(args[2], 30));
sb.append(makeSubLine(args[3], 8));
sb.append(makeSubLine(args[4], 4));
list.add(sb.toString());
}
}
}
public static void delete(BufferedReader reader, ArrayList<String> list, String id) throws IOException {
while (reader.ready()) {
String s = reader.readLine();
if (!s.startsWith(id)) list.add(s);
}
}
private static String makeSubLine(String s, int symbols) {
StringBuilder sb = new StringBuilder();
if (s.length() > symbols) sb.append(s, 0, symbols);
else {
sb.append(s);
for (int i = 0; i < symbols - s.length(); i++) {
sb.append(" ");
}
}
return sb.toString();
}
private static void makeDeal(int key, String... args) throws IOException {
Scanner sc = new Scanner(System.in);
String fileName = sc.nextLine();
String tempFile = fileName + ".tmp";
File file = new File(fileName);
File temp = new File(tempFile);
sc.close();
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(temp));
ArrayList<String> list = new ArrayList<>();
String id = String.valueOf(args[1]);
if (id.length() < 8) id += " ";
/////
if (key == 0) delete(reader, list, id);
if (key == 1) update(reader, list, id, args);
/////
writer.write(list.get(0));
for (int i = 1; i < list.size(); i++) {
writer.write("\n" + list.get(i));
}
reader.close();
writer.close();
file.delete();
temp.renameTo(file);
}
}