Не могу удалять записи из файла
Всем привет я учу 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 шт):
Три способа удаления из файла:
Переписать в новый файл всё, кроме удалённой части (для текстовых файлов - самое то)
Сдвинуть содержимое файла, идущее после удалённой части, влево, на её размер, затем установить конец файла в новую позицию.
Пометить запись как удалённую.