Проблема с объектными потоками Java при записи в файл - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь записать объект типа "HashMap" в файл и восстановить его при повторном запуске моей программы. Но я столкнулся с EOFException, когда я пытаюсь прочитать этот объект, а объект не читается из файла. Я использую методы flush () и close (), когда пишу объект для FileOutputStream & ObjectOutputStream. Также я создаю OutputStream & InputStream вместе для моего файла. вот мой код:

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();
    }

}

и вот код для написания объекта:

            table.put(NameField.getText(), IPField.getText());
            try {
                //writeTableToFile.reset();
                writeTableToFile.writeObject(table);
                writeTableToFile.flush();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

С уважением, Саяд

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Файл кажется неполным.Когда я смотрю на ваш код, вы создаете файл table.txt и сразу же пытаетесь прочитать его.

Этот ctor:

new FileOutputStream(tableFile)

перезапишет файл.Если вы прочитаете его позже, он будет пуст (кроме информации заголовка из OOS)

0 голосов
/ 10 августа 2010

EOFException означает, что файл не завершен.Так что он либо не flush() ed, либо не close() ed, либо исключение проглочено где-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...