Um problema com fluxos de objeto Java enquanto escrevia para arquivar
-
27-09-2019 - |
Pergunta
Estou tentando escrever um objeto do tipo "hashmap" em um arquivo e recuperá -lo quando meu programa é executado novamente. Mas eu enfrentei uma eofexception quando tento ler esse objeto e o objeto não é lido no arquivo. Eu uso os métodos Flush () e Close () quando escrevi o objeto para o FileOutputStream & ObjectOutputStream. Também crio o OutputStream e o InputStream juntos para o meu arquivo. Aqui está o meu código:
DataOutputStream outToFile;
DataInputStream inFromFile;
ObjectOutputStream writeTableToFile;
ObjectInputStream readTableFromFile;
File tableFile;
public DNS(){
try {
tableFile = new File("table.txt");
outToFile = new DataOutputStream(new FileOutputStream(tableFile) );
writeTableToFile = new ObjectOutputStream(outToFile);
inFromFile = new DataInputStream(new FileInputStream(tableFile));
readTableFromFile = new ObjectInputStream(inFromFile);
HashMap table2 = (HashMap) readTableFromFile.readObject();
if (table2 == null)
table=new HashMap(100);
else
table = table2;
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(EOFException e){
table=new HashMap(100);
}
catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
E aqui está o código para escrever objeto:
table.put(NameField.getText(), IPField.getText());
try {
//writeTableToFile.reset();
writeTableToFile.writeObject(table);
writeTableToFile.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
Atenciosamente, Sajad
Solução
O arquivo parece estar incompleto. Quando olho para o seu código, você está criando o arquivo Table.txt e tenta lê -lo imediatamente depois.
Este ctor:
new FileOutputStream(tableFile)
substituirá o arquivo. Se você lê depois, estará vazio (exceto as informações do cabeçalho dos OOS)
Outras dicas
EOFException
significa que o arquivo está incompleto. Então não é flush()
ed ou não close()
Ed ou uma exceção é engolida em algum lugar.