Это домашнее задание, которое я делаю на прогулке, изучая Java.
Я пишу программу, и все работает как положено, кроме чтения / записи в файл.
У меня есть один класс с именем Medico
, который содержит только одну строку (typeOfMedico
) и один int (valorFacturado
).Medico
является подклассом Pessoa
.Pessoa
содержит данные, такие как имя и адрес.public class Medico extends Pessoa implements Serializable
является главной функцией класса Medico
.
В моем основном классе с именем Clinica
я запрашиваю ввод данных пользователем, и в конце я создаю new Medico
, который добавляется в Arraylist с именем medico
.
Длячтение и запись в файл Я создал этот класс:
package clinica;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class FicheiroObjectos {
private ObjectInputStream iS;
private ObjectOutputStream oS;
public void abreLeitura(String nomeDoFicheiro) throws IOException {
iS = new ObjectInputStream(new FileInputStream(nomeDoFicheiro));
}
public void abreEscrita(String nomeDoFicheiro) throws IOException {
oS = new ObjectOutputStream(new FileOutputStream(nomeDoFicheiro));
}
public Object leObjecto() throws IOException, ClassNotFoundException {
return iS.readObject();
}
public void escreveObjecto(Object o) throws IOException {
oS.writeObject(o);
}
public void fechaLeitura() throws IOException {
iS.close();
}
public void fechaEscrita() throws IOException {
oS.close();
}
public void leFicheiroMedicos() {
Medico medicos;
while (true) {
try {
medicos = (Medico) this.leObjecto();
Clinica.medicos.add(medicos);
} catch (EOFException eof) {
break;
} catch (ClassNotFoundException cnf) {
System.out.print("\nClassNotFoundException!\nO programa vai terminar\n");
System.exit(-1);
} catch (IOException ioe) {
System.out.print("\nErro ao ler o ficheiro!\nO programa vai terminar\n");
System.exit(-1);
}
}
}
public void escreveFicheiroMedicos() {
try {
for (Medico medicos: Clinica.medicos) {
this.escreveObjecto(medicos);
}
} catch (IOException e) {
System.out.print("\nErro ao escrever no ficheiro!\nO programa vai terminar\n");
System.exit(-1);
}
}
}
В моем основном классе я создал следующие две функции:
public static void insereDadosExistentes() {
try {
FicheiroObjectos file = new FicheiroObjectos();
file.abreLeitura("Medicos.dat");
file.leFicheiroMedicos();
file.fechaLeitura();
} catch (IOException ioe) {
}
}
public static void gravarMedicos() {
try {
FicheiroObjectos file = new FicheiroObjectos();
file.abreEscrita("Medicos.dat");
file.escreveFicheiroMedicos();
file.fechaEscrita();
} catch (IOException e) {
System.out.print("\nErro ao escrever no ficheiro!\nO programa vai terminar\n");
System.exit(-1);
}
}
}
Затем добавил insereDadosExistentes()
в началемоей функции main
и добавлен gravarMedicos()
сразу после добавления Medico
в мой массив medicos
.
Когда я запускаю свою программу (При первом запуске файл Medicos.dat
не существует) и создайте Medico
, Medico
будет добавлен в мой массив и файл Medicos.dat
создан.Затем я останавливаю программу и при следующем запуске, который теперь имеет файл Medicos.dat
, я получаю сообщение об ошибке:
Erro ao ler o ficheiro!
O programa vai terminar
Проблема заключается в записи файла или чтении файла?Я знаю, что при чтении файла выдается ошибка, но это может быть связано с тем, что извлечение в файл выполняется неправильно.
Если я пытаюсь открыть Medicos.dat
, я вижу некоторые символы, но ничего не связано с информацией, которую яввод, так что я даже не знаю, в порядке ли запись файла.
Помните, что все, кроме обработки файла, работает должным образом.
Можете ли вы указать мне в некоторых направлениях?
favolas