Всем добрый день. Программа не проходит проверку по 3 и 4 пункту, хотя обновление и удаление строки работает. Прошу помочь найти вариант запуска программы, при котором она сработает неправильно, а уж исправлю я сам. Понятно, что в коде без пол-литра никто не разберется. поэтому найти ошибку в коде не прошу. Заранее спасибо.
package com.javarush.task.task18.task1828;

/*
Прайсы 2
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s, str = null, old = null;
        s = reader.readLine();
        FileInputStream fi = null;
        try{
            fi = new FileInputStream(s);
            BufferedReader br = new BufferedReader(new InputStreamReader(fi));
        }catch(FileNotFoundException e){}
        FileOutputStream fo = null;
        byte b[] = new byte[1000];//основной массив файла
        byte ww[] = new byte[1000];//рабочий массив для копирования части файла при сдвиге данных
        boolean end_all = false;
        int len = 0, nlen = 0;
        int ff = 0;
        int cc = 0;
        int start = 0, end = 0, nstart = 0, nend = 0;
            while (fi.available() > 0) {
                fi.read(b);
                if (!end_all) {
                    int ij = b.length - 1;
                    int minus_one = 0;
                    while (b[ij] == 0) {//заполняем массив заведомо неиспользуемыми символами
                        b[ij] = -2;
                        ij--;
                        minus_one = ij;
                    }
                    int k = 0;
                    int end1 = 0;
                    byte c[] = new byte[8];//id
                    byte pr1[];//productName
                    byte pr2[];//price
                    byte pr3[];//quantity
                    try {
                        if (args[0].length() > 0) {
                            if (args[0].equals("-u")) { //update
                                if (args[1].length() > 0 && args[2].length() > 0 && args[3].length() > 0 && args[4].length() > 0) {
                                    while (args[1].length() < 8) {
                                        args[1] = args[1] + " ";
                                    }
                                    c = args[1].getBytes();
                                    for (int y = 0; y < b.length; y++) {
                                        if (!end_all) {
                                            if (y == 0 || b[y - 1] == 10) {//смотрим всегда id-шник
                                                for (int jk = y; jk < (y + 8); jk++) {
                                                    if (b[jk] == c[k]) {
                                                        k++;
                                                        if (k == args[1].length() && args[1].length() == 8) {
                                                            start = y + 8;//откуда начинаем работать в строке

                                                            pr1 = args[2].getBytes();//копируем productName
                                                            byte prName[] = new byte[30];
                                                            for (int yy = 0; yy < prName.length; yy++) {//в prName либо данные, либо 0
                                                                if (yy < pr1.length) prName[yy] = pr1[yy];
                                                                else prName[yy] = 32;
                                                            }
                                                            int uend = 0;
                                                            int u = 0;
                                                            uend = start + prName.length;//конец поля productName
                                                            for (int i = start; i < uend; i++) {//копируем в основной массив
                                                                if (u < prName.length) {
                                                                    b[i] = prName[u];
                                                                    u++;
                                                                }
                                                            }

                                                            u = 0;
                                                            pr2 = args[3].getBytes();
                                                            byte price[] = new byte[8];
                                                            for (int yy = 0; yy < price.length; yy++) {
                                                                if (yy < pr2.length) price[yy] = pr2[yy];
                                                                else price[yy] = 32;
                                                            }
                                                            start = uend;
                                                            uend = start + price.length;
                                                            for (int i = start; i < uend; i++) {
                                                                if (u < price.length) {
                                                                    b[i] = price[u];
                                                                    u++;
                                                                }
                                                            }

                                                            u = 0;
                                                            pr3 = args[4].getBytes();
                                                            int oend = 0;
                                                            byte quantity[] = new byte[4];
                                                            for (int yy = 0; yy < quantity.length; yy++) {
                                                                if (yy < pr3.length) quantity[yy] = pr3[yy];
                                                                else quantity[yy] = 32;
                                                            }

                                                            start = uend;
                                                            uend = start + quantity.length;
                                                            for (int i = start; i < minus_one; i++) {
                                                                if (b[i] == 13) {
                                                                    oend = i;
                                                                    break;
                                                                }
                                                            }
                                                            int leng = oend - start;
                                                            ///////////////////////////////
                                                            int nn = 0, n = 0, w = 0;//когда изменяемая строка больше строки в файле
                                                            if (b[uend] != -2) {//копирование части файла
                                                                if (leng < pr3.length) {
                                                                    nn = uend - oend;//если новое количество длин старого насколько надо сдвинуть
                                                                }
                                                                n = oend;//с какого символа сдвигать

                                                                for (int e = n; e <= minus_one; e++) {//копируем в рабочий массив
                                                                    if (w <= minus_one) {
                                                                        ww[w] = b[e];
                                                                        w++;
                                                                    }
                                                                }
                                                            }
                                                            ////////////////////////////////
                                                            for (int i = start; i < uend; i++) {
                                                                if (u < quantity.length) {
                                                                    b[i] = quantity[u];
                                                                    u++;
                                                                }
                                                            }
                                                            int jj = 0;
                                                            if (b[uend] != -2 && w != 0) {//добавляем перенос строки, если не конец файла
                                                                jj = uend;
                                                                minus_one = minus_one + nn;
                                                                int t = 0;
                                                                for (int g = jj; g <= minus_one; g++) {//возвращаем остаток файла из рабочего массива в основной
                                                                    b[g] = ww[t];
                                                                    t++;
                                                                }
                                                            }

                                                            if (w == 0 && minus_one != uend) minus_one = uend;

                                                            fo = new FileOutputStream(s);
                                                            for (int ii = 0; ii <= minus_one; ii++) {
                                                                if (b[ii] != -2) fo.write(b[ii]);
                                                            }
                                                            fo.close();
                                                            end_all = true;
                                                        }
                                                    } else k = 0;
                                                }
                                            }
                                        } else break;
                                    }
                                }
                            } else if (args[0].equals("-d")) {//delete
                                if (args[1].length() > 0 && args.length == 2) {
                                    while (args[1].length() < 8) {
                                        args[1] = args[1] + " ";
                                    }
                                    c = args[1].getBytes();

                                    for (int y = 0; y < b.length; y++) {
                                        if (!end_all) {
                                            if (y == 0 || b[y - 1] == 10) {//смотрим всегда id-шник
                                                for (int jk = y; jk < (y + 8); jk++) {
                                                    if (b[jk] == c[k]) {
                                                        k++;
                                                        if (k == args[1].length() && args[1].length() == 8) {
                                                            start = y;
                                                            for (int ll = start; ll < b.length; ll++) {
                                                                if (b[ll] == 13 || b[ll] == -2) {
                                                                    end = ll;
                                                                    break;
                                                                } else if (ll == (b.length - 1)) end = b.length;
                                                            }
                                                            if ((end + 1) == b.length) {
                                                                end = b.length;
                                                                len = b.length;
                                                            }
                                                            if (b[end] == -2 && start != 0) {//последняя строка
                                                                end1 = end;
                                                                b[start - 2] = -2;
                                                                b[start - 1] = -2;
                                                            } else if (end != b.length && start == 0)
                                                                end1 = end + 2;//первая строка
                                                            else if (end == b.length && start == 0)
                                                                end1 = end;//единственная строка в файле
                                                            else {
                                                                end1 = end + 2;
                                                            }//строка посередине
                                                            for (int u = start; u < end1; u++) {
                                                                b[u] = -2;
                                                            }

                                                            fo = new FileOutputStream(s);
                                                            for (int ii = 0; ii < b.length; ii++) {
                                                                if (b[ii] != -2)
                                                                    fo.write(b[ii]);
                                                            }
                                                            fo.close();
                                                            end_all = true;
                                                        }
                                                    } else k = 0;
                                                }
                                            }
                                        } else break;
                                    }
                                }
                            }

                        }
                    }catch(ArrayIndexOutOfBoundsException e){}
                }
            }
            fi.close();
            reader.close();
      }
}