Получить данные из файла .dat - PullRequest
0 голосов
/ 21 мая 2010

У нас есть приложение, которое требует от нас динамического чтения данных из файла (.dat) с использованием десериализации. На самом деле мы получаем первый объект, и он выдает исключение нулевого указателя, когда мы обращаемся к другим объектам, используя цикл for.

            File file=null;
             FileOutputStream fos=null;
             BufferedOutputStream bos=null;
             ObjectOutputStream oos=null;
             try{
                 file=new File("account4.dat");
                 fos=new FileOutputStream(file,true);
                 bos=new BufferedOutputStream(fos);
                 oos=new ObjectOutputStream(bos);
                 oos.writeObject(m);
                 System.out.println("object serialized");
                 amlist=new MemberAccountList();
                 oos.close();
             }
           catch(Exception ex){
             ex.printStackTrace();
           }

Чтение объектов :

    try{
        MemberAccount m1;
        file=new File("account4.dat");//add your code here
        fis=new FileInputStream(file);
        bis=new BufferedInputStream(fis);
        ois=new ObjectInputStream(bis);
        System.out.println(ois.readObject());
        **while(ois.readObject()!=null){
         m1=(MemberAccount)ois.readObject();
           System.out.println(m1.toString());
       }/*mList.addElement(m1);** // Here we have the issue throwing null pointer exception
        Enumeration elist=mList.elements();
        while(elist.hasMoreElements()){
            obj=elist.nextElement();
            System.out.println(obj.toString());
        }*/

    }
    catch(ClassNotFoundException e){

    }
    catch(EOFException e){
        System.out.println("end");
    }
    catch(Exception ex){
        ex.printStackTrace();
    }

1 Ответ

1 голос
/ 21 мая 2010

Проблема в вашем цикле while:

while(ois.readObject()!=null){
    m1=(MemberAccount)ois.readObject();
    System.out.println(m1.toString());
}

Вы читаете объект из потока, проверьте, не является ли он нулевым, а затем снова прочитаете из потока. Теперь поток может быть пустым, возвращая ноль.

Вместо этого вы можете сделать это:

while( ois.available() > 0 ){
    m1=(MemberAccount)ois.readObject();
    System.out.println(m1.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...