java写类到文件

标签 java file

这是我在步行学习 Java 时正在做的作业。

我正在编写一个程序,除了读/写文件外,它都按预期工作。

我有一个名为 Medico 的类仅包含一个字符串 ( typeOfMedico ) 和一个整数 ( valorFacturado )。 MedicoPessoa 的子类. Pessoa保存姓名和地址等数据。 public class Medico extends Pessoa implements SerializableMedico 上的主要功能类(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

最佳答案

  1. 确保您明确关闭 ObjectOutputStream,以便写入所有数据。

  2. 您的问题是 IOException。但是,回溯会告诉您发生了什么:打开、读取时遇到问题,什么?您可以调用 printStackTrace(),但最好您可以使用调试并只查看堆栈跟踪。

关于java写类到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662844/

相关文章:

java - Hibernate 中的日期和时间跨度查询

macos - 在 Swift 中逐行读取文件/URL

java - 将 Saxon 与 GeoTools 结合使用

java - iText Android - 向现有 PDF 添加文本

java - 为什么在 Java 的同一个类中不能有抽象方法和静态方法

c++ - 当我使用remove()时权限被拒绝

python - 检查文件是否相等

java - java中lateinit相对于null初始化的优势?

c - C 中 FILE 结构中的 r+ 是什么?

java - 将文件内容写入jsp