Подскажите, в чем проблема?
Пробовал тестировать на разных строках в файле - всегда происходит корректная замена
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
String fileName = scanner.nextLine();
scanner.close();
if (args.length > 0 && args[0].equals("-u")) {
String id = args[1];
String finalPhrase = finalPhrase(args[1], args[2], args[3], args[4]);
replaceString(id, finalPhrase,fileName);
} else if (args.length > 0 && args[0].equals("-d")){
String id = args[1];
deleteString(id, fileName);
}
}
public static String finalPhrase(String id, String productName, String price, String quantity){
String finalString = String.format("%-8.8s%-30.30s%-8.8s%4.4s",id, productName, price, quantity);
return finalString;
}
public static void replaceString(String id, String phraseToReplace, String where) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(where));
String line;
StringBuffer inputBuffer = new StringBuffer();
String toReplace = null;
//считываем файл и прибавляем к StringBuffer каждую новую строку
while ((line = reader.readLine()) != null){
inputBuffer.append(line + "\n");
//Если id строки совпадает с пришедшим из параметров запуска - записываем эту строку в отдельную переменную String для дальнейшего удаления
if (line.substring(0, 8).trim().equals(id)) toReplace = line;
}
reader.close();
line = String.valueOf(inputBuffer);
line = line.replaceAll(toReplace, phraseToReplace);
BufferedWriter writer = new BufferedWriter(new FileWriter(where));
writer.write(line);
writer.close();
}
public static void deleteString(String id, String where) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(where));
String line;
StringBuffer inputBuffer = new StringBuffer();
while ((line = reader.readLine()) != null){
//if we find line, that has necessary id - we will not append it to final line, which will re-place string in file.
if (line.substring(0, 8).trim().equals(id)) continue;
inputBuffer.append(line + "\n");
}
reader.close();
line = String.valueOf(inputBuffer);
BufferedWriter writer = new BufferedWriter(new FileWriter(where));
writer.write(line);
writer.close();
}
}