0

「HashMap」の種類のオブジェクトをファイルに書き込んで、プログラムを再度実行したときにそれを回復しようとしています。しかし、そのオブジェクトを読み取ろうとすると EOFException に直面し、オブジェクトがファイルから読み取られません。FileOutputStream と ObjectOutputStream のオブジェクトを作成するときに、flush() メソッドと close() メソッドを使用します。また、ファイル用に 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();
            }

よろしく、サジャド

4

2 に答える 2

0

EOFExceptionファイルが不完全であることを意味します。したがって、edでflush()はないか、edではないclose()か、例外がどこかに飲み込まれています。

于 2010-08-10T12:27:39.853 に答える
0

ファイルが不完全なようです。あなたのコードを見ると、ファイル table.txt を作成していて、その直後にそれを読み取ろうとしています。

この俳優:

new FileOutputStream(tableFile)

ファイルを上書きします。後で読むと、空になります(OOSからのヘッダー情報を除く)

于 2010-08-10T12:37:05.450 に答える