Odczyt serializowanych danych/rzutowanie danych

0

Hej.
Mam problem z programem który używa mechanizmu serializowania danych.
Klasa Magazyn zawierająca konstruktor tworzący tablice typu Towar.
Klasa Magazyn

package klasy;
import java.io.*;
public class Magazyn implements Serializable
{
    private static int liczbaTowarow;
    public Towar tab[];
    String nazwaPliku="C:\\pliczek.txt";
    public Magazyn()
    {
        tab = new Towar[10];
        liczbaTowarow=0;
    }
    public void dodaj(Towar t)
    {
        //System.out.println("funkcja dodaj "+t);
        tab[liczbaTowarow]=t;
        liczbaTowarow++;
        }
    public void wyswietl() throws NullPointerException
    {try{
        System.out.println("Funkcja 'wyswietl()' z klasy magazyn");
        for (int i = 0; i < 10; i++)
        {   if(tab[i]!=null)
            {
           // System.out.println(tab[i]);  
         tab[i].wyswietlWszystko();   
            }
            //else System.out.println("tutaj jest "+tab[i]);
         }
    }
    catch(NullPointerException e)
    {   
            
       
        System.out.println("Blad! przerywamy! tutaj wystepuje blad "+e);
        
    }
    }
    
/////////////tutaj funkcje odczytujace tablice  z pliku ///////////
                public void odczytajPlik(String nazwaPliku)throws IOException,ClassNotFoundException, NullPointerException
                { System.out.println("Funckcja 'odczytajPlik' z klasy magazyn");
                    Towar tab[] = new Towar[100];// byl Magazyn zamiast Towar
                    ObjectInputStream plik=null;
                    try
                    {
                        plik = new ObjectInputStream(new FileInputStream(nazwaPliku));
                        int i=0;
                        while(true)
                        {
                            tab[i++]=(Towar)plik.readObject();//byl magazyn zamiast Towar
                            
                        }
                        

                    }
                   catch(EOFException e)
                           
                          {
                             if(plik!=null)
                                plik.close();
                           } 
                    catch(NullPointerException e)
                    {
                        System.out.println("blad wskaznika"+e);
                    }
                   
                }
////////////////////tutaj funkcja dopisujaca do pliku//////////////////////////////////
                public void dopiszPlik (String nazwaPliku) throws IOException, ClassNotFoundException   
                {
                   
                  ObjectOutputStream plik2=null;
                    try
                    {
                      plik2=new ObjectOutputStream(new FileOutputStream(nazwaPliku));
                      
                      System.out.println("Funkcja 'dopisz plik()' z klasy magazyn");
                      for(int i=0;tab[i]!=null;i++)
                      { if(tab[i]!=null)
                        {
                         plik2.writeObject(tab[i]);
                          //System.out.println("funkcja dopisz "+tab[i]);
                         //tab[i].wyswietlWszystko();
                          plik2.flush();
                        }
                      }
                    }
                      finally
                      {
                              if(plik2!=null)
                                  plik2.close();
                              }
                        
                    }
                }

Klasa Main

package klasy;

import java.io.File;
import java.io.IOException;

public class main 
{
    public static void main(String[] args) throws IOException, ClassNotFoundException, NullPointerException 
    { String nazwaPliku="E:\\Pliczek.txt";
        Towar t1=new Towar("123","nazwa",234,"producent");
         Towar t2=new Towar("123","nazwa",234,"producent");
          Towar t3=new Towar("1223","nazwa",2334,"producent");
          Towar t4=new Towar("2314","nazwa",1234,"producent");
          
        Magazyn m1  = new Magazyn();
        Magazyn m2  = new Magazyn();
        m1.dodaj(t3);
        m1.dodaj(t1);
        m1.dodaj(t2);
        m1.dodaj(t4);

        m1.wyswietl();
        m1.dopiszPlik(nazwaPliku);
        //m1.odczytajPlik(nazwaPliku);
        //m1.wyswietl();

       
        m2.odczytajPlik(nazwaPliku);
        m2.wyswietl();

    }
}

Problem polega na tym, że funkcja dopiszPlik() zapisuje tablice do pliku, ale funkcja odczytajPlik() nie czyta zawartosci pliku.

Specjalnie utworzyłem nowy obiekt klasy Magazyn (m2) i wywołałem do niego funkcje która ma do niego przypisać zawartość pliku, ale niestety nic nie przypisuje. Co może byc nie tak w tej funkcji?

1

Do innej tablicy czytasz (zmienna lokalna metody odczytajPlik), a inną wyświetlasz (pole klasy Magazyn);

1

Dodatkowo powineneś sam podawać serialVersionUID, bo z domyślnym mogą być problemy :)

0

Głupi błąd a tyle problemów. Bardzo dziękuję ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1