Доброго дня. Когда начал решать эту задачу после "Прайсов", она мне показалась довольно лёгкой. Но сейчас я вообще ничего не понимаю. Не прохожу по пунктам 3 и 4, хотя код вроде верный. Где ошибка?
P. S. Проблема была в FileWriter. Если объявить без true, он просто стирает исходный файл. Поэтому пришлось объявлять два потока: один для записи, второй для "затирания":)
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;
import java.io.*;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
if (args.length != 0) {
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
String fileName = rd.readLine();
Solution sol = new Solution();
if (args[0].equals("-u")) {
sol.update(fileName, args[1], args[2], args[3], args[4]);
} else if (args[0].equals("-d")) {
sol.delete(fileName, args[1]);
}
}
}
public void update(String path, String id, String prName, String price, String quantity) {
try (BufferedReader reader = new BufferedReader(new FileReader(path));
FileWriter output = new FileWriter(path)) {
ArrayList<String> lines = new ArrayList<>();
while (reader.ready()) {
String str = reader.readLine();
if (id.equals(str.substring(0, 8).trim())) {
lines.add(String.format("-8d%-30s%-8s%-4s", id, prName, price, quantity));
} else {
lines.add(str);
}
}
for (String e: lines)
output.write(e);
} catch (FileNotFoundException e) {
System.out.println("The file hasn't found");
} catch (IOException e) {
e.printStackTrace();
}
}
public void delete(String path, String id) {
try (BufferedReader reader = new BufferedReader(new FileReader(path));
FileWriter output = new FileWriter(path)) {
ArrayList<String> lines = new ArrayList<>();
while (reader.ready()) {
String str = reader.readLine();
if (id.equals(str.substring(0, 8).trim())) {
continue;
} else {
lines.add(str);
}
}
for (String e: lines)
output.write(e);
} catch (FileNotFoundException e) {
System.out.println("The file hasn't found");
} catch (IOException e) {
e.printStackTrace();
}
}
}