[JAVA] Obiekty binarnie...

0

Witam

pojawiało się wiele razy na forum, ale nikt nie dał rady odpisać :(
mam pytanie, przygotowałem prosty program na zaliczenie laborek:
http://www.plucien.info/szkola/Zaliczenie.zip

problem napotkałem przy zapisywaniu danych do pliku, a następnie odczytywanie ich z powrotem :/

ma ktoś przykładowy kod jak to zrobić?

w tym programie występuje tablica obiektów -> właśnie tą tablice chciałbym zczytać do pliku, a następnie wczytać z pliku z powrotem do tablicy...
zagmatwałem :/

może ktoś pomoże, plizzz... znalazłem wiele przykładów, ale qrcze, wszystkie są do pojedynczych obiektów... a tablicy żaden z nich nie chce łyknąć :(

p.s.

próbowałem tak:

		try
		{
		ObjectInputStream odczyt = new ObjectInputStream(new FileInputStream("dane.dat"));
		
		for (int i=0; i<i_dane; i++)
		{
			dane[i] = (Obiekt)odczyt.readObject();
		}
		odczyt.close();
		odswiezListe();
... dalej obsługa wyjątków, etc.

wyskakuje błąd, że nie przechwycono wyjątku... i oczywiście program się wywala :(

0

Odczyt wyglada ok, najprawdopodobniej zawaliles zapis i plik ma nieodpowiedni format.
Postepuj jak napisano np. tutaj : http://home.tiscali.nl/~bmc88/java/sbook/041.html

0

Hej,
Z tego co pamietam wszystkie obiekty ktore chcesz zapisac do pliku przez strumien musza byc serializowane (implementowac interfejs serializable) i jego dwie metody : void writeObject() i readObject(). Zgoogluj jakis tutorial, np http://java.sun.com/docs/books/tutorial/essential/io/providing.html . Pozdr

0

Dobra. Załóżmy, że mamy tablicę obiektów.
Klasa niech nazywa się Customer, a tablica customers[]

import java.io.*;
public class MojaKlasa
{
   Customer[] customers = new Customer[20];
   File plik = new File("plik.obj");

   public void zapisz()
    {
        try
        {
            FileOutputStream fos = new FileOutputStream(plik);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(customers);
            oos.flush();
            oos.close();
        }
        catch(FileNotFoundException fnfe){} //obsługa wyjątków MUSI BYĆ!!
        catch(IOException ioe){}
        
    }


     public void czytaj()
    {
        try
        {
            FileInputStream fos = new FileInputStream(plik);
            BufferedInputStream bos = new BufferedInputStream(fos);
            ObjectInputStream oos = new ObjectInputStream(bos);
            customers = (Customer[]) oos.readObject();
            oos.close();
        }
        catch(ClassNotFoundException cnfe){}
        catch(FileNotFoundException fnfe){}
        catch(IOException ioe){}
        
        
    }

I wszystko.

</cpp>

!!AHA!! Oczywiście klasa Customer implements Serializable :)

0

dobra, wiem gdzie problem robiłem -> rzutowanie obiektów... zapisywałem tablice obiektów, a próbowałem odczytać pojedynczy obiekt...

wygląda to tak:

ObjectOutputStream pliczek = new ObjectOutputStream(new FileOutputStream(zapisPliku.getFileName()));
pliczek.writeObject(adresy);
pliczek.close();

a odczyt:

ObjectInputStream pliczek = new ObjectInputStream(new FileInputStream(odczytPliku.getFileName()));
Adres[] adres_temp = (Adres[]) pliczek.readObject();
pliczek.close();

działa cacy, da się nawet w jednym pliczku kilka obiektów wrzucić :)))) wypasiq :)
of korz implements serializable :P

0

http://www.plucien.info/szkola/Zaliczenie.zip
tu wrzuciłem gotowy projekcik :) z wykorzystaniem właśnie powyższego kodu :)

pozdrawiam i dzięks za pomoc :P

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