С горем пополам:
1) Перезаписывает.
2) Удаляет.
Но валик не принимает.
package com.javarush.task.task18.task1828;/*Прайсы 2*/import java.io.*;
import java.lang.reflect.Array;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine(); reader.close();
if (args.length != 0) {
FileInputStream inName = new FileInputStream(name);
BufferedReader br = new BufferedReader(new InputStreamReader(inName, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();int i;
while ((i = br.read()) != -1) {
char ch = (char) i;
stringBuilder.append(ch);
}
inName.close();
String str = stringBuilder.toString();
str = str.replaceAll("(.{50})", "$1|");
String[] idStringArr = str.split("\\|",-1);
ArrayList<String> idStringList = new ArrayList<>();
Collections.addAll(idStringList, idStringArr);
HashMap<String, String> map = new HashMap<>();
for (String ar : idStringList) {
if(!ar.equals("")) {
String key = ar.replaceAll("\n|\r\n", "").substring(0, 8);
String value = ar.replaceAll("\n|\r\n", "").substring(8);
map.put(key, value);
}
}
String idProductStr = idProduct(args[1]);
String nameProduct = nameProduct(args[2]);
String price = priceProduct(args[3]);
String quantity = quantityProduct(args[4]);
String newStr = nameProduct + price + quantity;
if(args[0].equals("-u")) {
for(HashMap.Entry<String, String> entry: map.entrySet()) {
String key = entry.getKey();
if(idProductStr.equals(key)) {
map.put(idProductStr, newStr);
}
}
stringReplacement(map, name);
}
if(args[0].equals("-d")) {
Iterator<Map.Entry<String, String>> entryIterator = map.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, String> entry = entryIterator.next();
String key = entry.getKey();
if (idProductStr.equals(key)) {
entryIterator.remove();
}
}
}
deleteStringToFile(map, name);
}
reader.close();
}
public static String idProduct(String idProduct) {//обрабатываем args id
idProduct = String.format("%-8s", idProduct);
return idProduct;
}
public static String nameProduct(String nameProduct) { // обрабатываем args имя
nameProduct = String.format("%-30s", nameProduct);
return nameProduct;
}
public static String priceProduct(String price) { // обрабатываем args цену
price = String.format("%-8s", price);
return price;
}
public static String quantityProduct(String quantity) { // обрабатываем args количество
quantity = String.format("%-4s", quantity);
return quantity;
}
public static void stringReplacement(HashMap<String,String> map, String name) {
try {
StringBuilder writeBuilder = new StringBuilder();
FileOutputStream fos = new FileOutputStream(name);
BufferedOutputStream bos = new BufferedOutputStream(fos);
for(HashMap.Entry<String, String> entry: map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
writeBuilder.append(key).append(value).append("\n");
}
bos.write(writeBuilder.toString().getBytes());
bos.close();
} catch (IOException e) {}
}
public static void deleteStringToFile(HashMap<String,String> hashMap, String name) {
try {
StringBuilder writeStrBl = new StringBuilder();
FileOutputStream fos = new FileOutputStream(name);
BufferedOutputStream bos = new BufferedOutputStream(fos);
for(HashMap.Entry<String, String> entry: hashMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
writeStrBl.append(key).append(value).append("\n");
}
bos.write("".getBytes());
bos.write(writeStrBl.toString().getBytes());
bos.close();
} catch (IOException e) {}
}
}