Народ, посмотрите плз свежим взглядом. Давно пилю и перепиливаю эту задачу, все никак не могу убедить валидатор принять ее.
Логика вроде бы правильная. По -d строчка удаляется, по -u обновляется. Потоки все закрываются (спасибо try с ресурсами)
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Solution {
public static void main(String[] args) {
if (args.length == 0)
return;
String programOption = args[0];
String id = String.format("%-8.8s", args[1]);
String productName;
String price;
String quantity;
String newItemData = null;
if (args.length > 2) {
productName = String.format("%-30.30s", args[2]);
price = String.format("%-8.8s", args[3]);
quantity = String.format("%-4.4s", args[4]);
newItemData = productName + price + quantity;
}
Path dbFile = null;
try (BufferedReader fileNameScanner = new BufferedReader(new InputStreamReader(System.in))) {
dbFile = Paths.get(fileNameScanner.readLine());
} catch (IOException e) {
e.printStackTrace();
}
switch (programOption) {
case "-u":
updateItem(dbFile, id, newItemData);
break;
case "-d":
deleteItem(dbFile, id);
break;
}
}
private static void deleteItem(Path file, String id) {
try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file.toFile()))) {
Stream<String> fileStream = Files.lines(file);
List<String> result = fileStream
.filter(line -> !line.startsWith(id))
.collect(Collectors.toList());
for (String s : result) {
fileWriter.write(s + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void updateItem(Path file, String id, String newItemData) {
try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file.toFile()))) {
List<String> fileStrings = Files.readAllLines(file);
for (String line : fileStrings) {
if (line.startsWith(id)) {
fileWriter.write(id + newItemData + "\n");
} else {
fileWriter.write(line + "\n");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}