Помогите, пожалуйста. Не хотел считывать с помощью reader^ов строки, вместо это попытался решить, только используя InputStream и OutputStream
package com.javarush.task.task18.task1828;
import org.w3c.dom.ls.LSOutput;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
if (args.length == 0) return;
String mode = args[0];
if (!mode.equals("-u") && !mode.equals("-d")) return;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
reader.close();
// String file = "/home/vasily/hello.txt";
String fileTemp = file + "-temp";
int searchId = Integer.parseInt(args[1]);
BufferedInputStream inputStreamOriginal = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream outputStreamTemp = new BufferedOutputStream(new FileOutputStream(fileTemp));
String line;
ArrayList<Byte> lineBytes = new ArrayList<>();
while (inputStreamOriginal.available() > 0) {
int mb = inputStreamOriginal.read();
lineBytes.add((byte)mb);
if (mb != '\n' && inputStreamOriginal.available() != 0) continue;
byte[] bytes = new byte[lineBytes.size()];
for (int i = 0; i < lineBytes.size(); i++) {
bytes[i] = lineBytes.get(i);
}
line = new String(bytes);
System.out.println("current line:\n" + line);
lineBytes.clear();
int id = parseId(line);
if (id != searchId) {
outputStreamTemp.write(bytes);
continue;
}
if (mode.equals("-d")){
System.out.println("line for deletion:\n" + line);
continue;
}
String name = args[2];
String price = args[3];
String quantity = args[4];
line = updateLine(line, name, price, quantity);
System.out.println("updated line:\n" + line);
byte[] bytesUpdated = line.getBytes();
outputStreamTemp.write(bytesUpdated);
}
inputStreamOriginal.close();
outputStreamTemp.close();
BufferedInputStream inputStreamTemp = new BufferedInputStream(new FileInputStream(fileTemp));
BufferedOutputStream outputStreamOriginal = new BufferedOutputStream(new FileOutputStream(file));
byte[] bts = new byte[1000];
while (inputStreamTemp.available() > 0) {
int count = inputStreamTemp.read(bts);
outputStreamOriginal.write(bts, 0, count);
}
inputStreamTemp.close();
outputStreamOriginal.close();
}
public static String updateLine(String line, String newName, String newPrice, String newQuantity)
{
int id = parseId(line);
return getStoreId(id) + getStoreName(newName) + getStorePrice(newPrice) + getStoreQuantity(newQuantity) + (line.endsWith("\n") ? "\n" : "");
}
public static String getStoreId(int id)
{
return getStoreItem(id + "", 8);
}
public static String getStoreName(String name)
{
return getStoreItem(name, 30);
}
public static String getStorePrice(String price)
{
return getStoreItem(price, 8);
}
public static String getStoreQuantity(String quantity)
{
return getStoreItem(quantity, 4);
}
public static String getStoreItem(String item, int maxLength)
{
if (item.length() > maxLength) {
return item.substring(0, maxLength);
}
int count = maxLength - item.length();
StringBuilder sb = new StringBuilder(item);
for (int i = 0; i < count; i++) {
sb.append(" ");
}
return sb.toString();
}
public static int parseId(String line)
{
String id = line.substring(0, 8).trim();
return id.equals("") ? 0 :Integer.parseInt(id.trim());
}
}