Что-то у меня явные проблемы с вводом/выводом.
На тестовом файле вполне себе производится замена данных, пример:
Исходный файл:
19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
19847983Куртка для сноубордистов, разм10173.991234
После запуска с командной строкой:
198478 замена данных о товаре 000.00 0000
Получаю файл:
19846 Шорты пляжные синие 159.00 12
198478 замена данных о товаре 000.00 0000
19847983Куртка для сноубордистов, разм10173.991234
Однако валидатор не устраивает. В чем засада?
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader rFileName = new BufferedReader(new InputStreamReader(System.in));
String fileName = rFileName.readLine();
rFileName.close();
//Проверяем входную строку, если не пустая, "разбираем" на составляющие
if(args.length !=0){
Scanner sc = new Scanner(new FileReader(fileName));
ArrayList<String> content = new ArrayList<>();
while (sc.hasNextLine()){
content.add(sc.nextLine());
}
String key = args[0];
String id = args[1];
String finish;
switch (key){
//Вариант: заменяем данные в строке с заданным id
case "-u":{
String quantity = args[args.length-1];
String price = args[args.length-2];
String productName = args[2];
if(args.length>5){
for (int i =3; i < args.length-2 ; i++) {
productName = productName.concat(" "+ args[i]);
}
}
//собираем строку в заданном формате
if(productName.length()<=30){
finish = String.format("%-30s",productName);
}
else finish = String.format("%.30s",productName);
if (price.length()<=8){
finish = finish.concat(String.format("%-8s", price));
}
else finish = finish.concat(String.format("%.8s",price));
if (quantity.length()<=4){
finish = finish.concat(String.format("%-4s",quantity));
}
else finish = finish.concat(String.format("%.4s",quantity));
//заменяем строку в массиве для записи на собранную
for (int i = 0; i < content.size(); i++) {
String s = content.get(i).substring(0,8);
if(s.contains(id)){
content.set(i,s.concat(finish));
break;
}
}
break;
}
//Вариант: удаляем строку с заданным id:
case "-d":{
for (int i = 0; i < content.size(); i++) {
if(content.get(i).substring(0,8).contains(id)){
content.remove(i);
break;
}
}
break;
}
}
BufferedWriter clean = new BufferedWriter(new FileWriter(fileName));
clean.write("");
clean.close();
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName,true));
for (int i = 0; i < content.size(); i++) {
writer.write(content.get(i));
if(i !=(content.size()-1))writer.newLine();
}
content.clear();
sc.close();
writer.close();
}
}
}