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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top