запись в файл лучше производить построчно? а не через Files.write()?
package com.javarush.task.task18.task1828;
/*
Прайсы 2
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static java.lang.Integer.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
reader.close();
//Объявление массива
ArrayList<String> list = new ArrayList<>();
reader = new BufferedReader(new FileReader(file));
String line;
//Запись в массив
while ((line = reader.readLine()) != null){
list.add(line);
}
reader.close();
//Проверка Аргумента
if (args.length > 0) {
if (args[0].equals("-u")) {
Up(list, file, args);
} else if (args[0].equals("-d")) {
Del(list, file, args);
}
}
}
//Метод Удаления строки из файла
public static void Del(ArrayList<String> arr, String filename, String[] args) throws IOException {
int id;
for (int i = 0; i < arr.size(); i++) {
Pattern p = Pattern.compile("\\d{1,8}");
Matcher m = p.matcher(arr.get(i));
m.find();
id = Integer.parseInt(m.group());
if (id == parseInt(args[1])) {
arr.remove(i);
break;
}
}
Files.write(Paths.get(filename), arr, StandardCharsets.UTF_8);
}
//Метод Изменения строки в файле
public static void Up(ArrayList<String> arr, String filename, String[] args) throws IOException {
int id;
for (int i = 0; i < arr.size(); i++) {
Pattern p = Pattern.compile("\\d{1,8}");
Matcher m = p.matcher(arr.get(i));
m.find();
id = Integer.parseInt(m.group());
if (id == parseInt(args[1])) {
arr.set(i, format(args[1], args[2], args[3], args[4]));
break;
}
}
Files.write(Paths.get(filename), arr, StandardCharsets.UTF_8);
}
private static String format(String id, String name, String price, String quality){
if (id.length() > 8) id = id.substring(0,8);
if (name.length()>30) name = name.substring(0,30);
if (price.length()> 8) price = price.substring(0, 8);
if (quality.length()> 4) quality = quality.substring(0, 4);
String str = String.format("%-8s%-30s%-8s%-4s", String.valueOf(id), name, price, quality);
System.out.println(str);
return str;
}
}