Boa tarde, é o seguinte:
Estou com um erro ao gravar objetos em um arquivo, quando o objeto do tipo ObjectOutputStrem executa o método writeObject, o try acusa e gera a exceção.Alguém pode me ajudar ? Segue o código do meu método e das classes:
package exer6_emdiante;
import java.io.Serializable;
import java.time.LocalDate;
public class Empregado implements Serializable {
private static final long serialVersionUID = 1L; //verifica a versão da classe
protected static transient int mat_aux = 1;
protected int matricula;
protected String nome;
protected String funcao;
protected double salario;
protected LocalDate data_adm;
//transient indica q o objeto não erá conter o atributo
//DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy");
public Empregado () {
this.matricula = mat_aux;
Empregado.mat_aux++;
}
public Empregado (String nome, String funcao, double salario,
LocalDate data_adm) {
this();
this.nome = nome;
this.funcao = funcao;
this.salario = salario;
this.data_adm = data_adm;
}
public Empregado (int matricula, String nome, String funcao, double salario,
LocalDate data_adm) {
this.matricula = matricula;
this.nome = nome;
this.funcao = funcao;
this.salario = salario;
this.data_adm = data_adm;
}
// métodos de acesso
public int getMatricula() {
return matricula;
}
public void setMatricula(int matricula) {
this.matricula = matricula;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getFuncao() {
return funcao;
}
public void setFuncao(String funcao) {
this.funcao = funcao;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
public LocalDate getData_adm(){
return data_adm;
}
public void setData_adm(LocalDate data_adm) {
this.data_adm = data_adm;
}
}
Classe que contêm métodos para gravação e leitura:
package controllerArquivos;
import exer6_emdiante.Empregado;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class Stream {
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/DD/yyyy");
public void gravaArquivoObjeto(Map<String, Empregado> empregados, String nomeArq) {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(nomeArq);
oos = new ObjectOutputStream(fos);
if (!empregados.isEmpty()) {
for (Map.Entry<String, Empregado> pair : empregados.entrySet()) {
Empregado emp = pair.getValue();
oos.writeObject(emp); // Gera a exceção nessa linha
}
}
System.out.printf("Objeto(s) gravado(s) com sucesso.");
} catch(FileNotFoundException fnfe) {
System.out.printf("Arquivo não existe para: " + nomeArq);
} catch (IOException ioe) {
System.out.printf("Erro de gravação.");
} finally {
try {
if (fos != null) fos.close();
if (oos != null) oos.close();
} catch(IOException e) {}
}
}
}
Classe que uso os métodos:
package viewArquivos;
import controllerArquivos.Stream;
import exer6_emdiante.Empregado;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class ProgramaArquivos {
public static void main(String[] args) {
Map<String, Empregado> mapa = new HashMap();
mapa.put("fulano", new Empregado(1,"fulano","analista",100,LocalDate.of(2020, 01, 10)));
Stream stream = new Stream();
try {
stream.gravaArquivoObjeto(mapa, "arquivo.txt");
} catch(IOException ex) {
System.out.println("Ocorreu algum erro.");
}
}
}