Не могу удалять записи из файла

Всем привет я учу Java и для закрепления материала попросил друга дать мне задание.

Оно должно давать возможность пользователю создавать карточки пациентов(имя, болезнь, доктор) и записывать их в .txt файл, а так же давать возможность эти самые карточки удалять из .txt файла.

Я научился создавать карточки и сохранять их файл, а так же научился читать записи из файла и выводить на консоль, а удалять у меня не получается вообще, потому и прошу помощи(так же у меня проблемы с ООП, поэтому если у вас есть какие либо замечания на этот счет, то пожалуйста напишите их и предложите свой вариант).

Оставляю свой код ниже:

PatientCard

package com.dreven95.patientcardmanager;

import java.util.Scanner;

public class PatientCard {

    private int patientId;
    private String patientName;
    private String diagnosis;
    private String doctorName;

    Scanner keyboard = new Scanner(System.in);
    private static int counter = 0;

    public void addPatientCard() {
        System.out.println("Введите имя пациента: ");
        this.patientName = keyboard.nextLine();
        System.out.println("Введите диагноз пациента: ");
        this.diagnosis = keyboard.nextLine();
        System.out.println("Введите имя лечащего доктора: ");
        this.doctorName = keyboard.nextLine();
        this.patientId = counter++;
    }

    public String getPatientName() {
        return patientName;
    }

    public String getDiagnosis() {
        return diagnosis;
    }

    public String getDoctorName() {
        return doctorName;
    }

    public int getPatientId() {
        return patientId;
    }

    @Override
    public String toString() {
        return "PatientCard{" +
                "patientId=" + patientId +
                ", patientName='" + patientName + '\'' +
                ", diagnosis='" + diagnosis + '\'' +
                ", doctorName='" + doctorName + '\'' +
                '}';
    }
}

UserInterface

package com.dreven95.patientcardmanager;

import java.io.*;
import java.util.Locale;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class UserInterface {

    private String answer;
    Scanner keyboard = new Scanner(System.in);

    public void UI() {
        System.out.println("Здравствуйте, хотите создать карточку пациента?");
        this.answer = keyboard.nextLine().toLowerCase();
        if(this.answer.equals("да") || this.answer.equals("д")) {
            PatientCard patient = new PatientCard();
            patient.addPatientCard();
            System.out.println(patient);
            writeToFile("database.txt", patient.toString());
            UI();
        }else if (this.answer.equals("нет") || this.answer.equals("н")) {
            System.out.println("Пока");
        }else {
            System.out.println("Некорректный ответ. Попробуйте снова");
            UI();
        }
    }

    public void UII() {
        System.out.println("Здравствуйте! Выберете интересующую вас опцию: ");
        System.out.println("1. Создать карточку пациента \n 2. Удалить карточку пациента \n 3. Показать карточку пациента");
        this.answer = keyboard.nextLine();
        if (this.answer.equals("1")) {
            PatientCard patient = new PatientCard();
            patient.addPatientCard();
            writeToFile("database.txt", patient.toString());
            UI();
        }
        else if(this.answer.equals("2")) {
            System.out.println("Введите id пациента");
            this.answer = keyboard.nextLine();
            deleteToFile("database.txt", Integer.valueOf(this.answer));
        }
    }

    private static void writeToFile(String fileName, String content) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))) {
            writer.write(content + "|" + "\n");
        }
        catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static void readFile(String fileName) {
        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            while(reader.ready()) {
                System.out.println(reader.readLine());;
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    // Понятия не имею как это сделать
    private static void deleteToFile(String fileName, int patientId) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            String str = readFile(fileName);
            char[] chars = str.toCharArray();
            if (Character.getNumericValue(chars[22]) != patientId) {
                writer.write(str);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static void parseFile(String fileName) {
        try {
            InputStream inputStream = new FileInputStream(fileName);
            StringBuilder content = new StringBuilder();
            int i;
            while ((i = inputStream.read()) != -1) {
                content.append((char) i);
            }
            System.out.println(content);
            inputStream.close();
        }
        catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

Ответы (1 шт):

Автор решения: MBo

Три способа удаления из файла:

Переписать в новый файл всё, кроме удалённой части (для текстовых файлов - самое то)

Сдвинуть содержимое файла, идущее после удалённой части, влево, на её размер, затем установить конец файла в новую позицию.

Пометить запись как удалённую.

→ Ссылка