这是我在步行学习 Java 时正在做的作业。
我正在编写一个程序,除了读/写文件外,它都按预期工作。
我有一个名为 Medico
的类仅包含一个字符串 ( typeOfMedico
) 和一个整数 ( valorFacturado
)。 Medico
是 Pessoa
的子类. Pessoa
保存姓名和地址等数据。 public class Medico extends Pessoa implements Serializable
是 Medico
上的主要功能类(class)。
在我的主类上,名为 Clinica
,我要求用户输入并在最后创建一个 new Medico
它被添加到名为 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
被 build 。然后我停止程序并在下一次运行时,它现在有一个 Medicos.dat
文件,我得到错误:
Erro ao ler o ficheiro!
O programa vai terminar
问题出在写文件还是读文件? 我知道读取文件时出现错误,但这可能是因为未正确执行写入文件。
如果我尝试打开 Medicos.dat
我可以看到一些字符,但与我输入的信息无关,所以我什至不知道文件写入是否正常。
请记住,除了文件处理之外,所有工作都按预期进行。
你能给我指明方向吗?
蚕 bean
最佳答案
确保您明确关闭 ObjectOutputStream,以便写入所有数据。
您的问题是 IOException。但是,回溯会告诉您发生了什么:打开、读取时遇到问题,什么?您可以调用 printStackTrace(),但最好您可以使用调试并只查看堆栈跟踪。
关于java写类到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662844/