При проведении теста нужная строка удаляется. Но валидатору что-то не нравится. В чем может быть загвоздка? Претензии только к варианту с параметром -d.
import java.io.*;
import java.util.List;
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) throws IOException, FileNotFoundException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fName = reader.readLine();

       String id = args[1];
       String q=args[4];
       String prName = args[2];
       String price = args[3];
       String mode=args[0];

        switch (mode) {
            case "-u" :
                update(id, prName, price, q, fName);
                break;
            case "-d" :
                delete(id, fName);
                break;
        }
        reader.close();
    }

    public static void update(String id, String prName, String price, String q, String fName) throws IOException, FileNotFoundException  {

        while (prName.length()<30) {
            prName+=" ";
        }

        while (id.length()<8) {
            id+=" ";
        }
        while (price.length()<8) {
            price+=" ";
        }
        while (q.length()<4) {
            q+=" ";
        }

        FileInputStream freader = new FileInputStream(fName);
        BufferedReader reader = new BufferedReader(new InputStreamReader(freader));

//Создаем набор "нужных" строк для файла
        List< String> data = new ArrayList< String>();
        String str="";
        while ((str=reader.readLine())!=null) {
            String idRead=str.substring(0,8);
            if (!id.equals(idRead)) {
                str+="\r\n";
                data.add(str);
            } else {
                str=id+prName+price+q+"\r\n";
                data.add(str);
            }
        }
        freader.close();
        reader.close();

//Перезаписываем полученные строки в файл
        FileOutputStream fwriter = new FileOutputStream(fName);
        for (int i=0; i<data.size();i++) {
            fwriter.write(data.get(i).getBytes());
        }
        fwriter.close();
    }

    private static void delete(String id, String fName) throws IOException, FileNotFoundException  {
        FileInputStream freader = new FileInputStream(fName);
        BufferedReader reader = new BufferedReader(new InputStreamReader(freader));

//Записываем в список все строки из файла, кроме удаляемой
        String str="";
        List<String> data = new ArrayList< String>();
        while ((str=reader.readLine())!=null) {
            String idRead=str.substring(0,8);
            if (!id.equals(idRead.trim())) {
                data.add(str);
            }
        }
        freader.close();
        reader.close();

//Записываем в файл все строки, кроме удаленной
        FileOutputStream fwriter = new FileOutputStream(fName);
        for (int i =0; i<data.size();i++) {
            if (i != (data.size()-1)) {
                str=data.get(i)+"\r\n";
            } else {
                str=data.get(i);
            }
            fwriter.write(str.getBytes());
        }
        fwriter.close();
    }