Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pisanje objekata u fajl?

[es] :: Java :: Pisanje objekata u fajl?

[ Pregleda: 2133 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.static.isp.telekom.rs.



+45 Profil

icon Pisanje objekata u fajl?25.04.2014. u 11:22 - pre 83 meseci
Cao, ne mogu da nadjem resenje za moj problem , da li ima neko neki predlog kako da pokusam.

pomocu ovog koda zapisem objekat tipa Vlasnik u fajl, to se odradi, objekat se sacuva, kasnije ga mogu ocitati i sa njim manipulisati. Ono sto me muci je kako da u fajl u koji zapisujem objekte tipa Vlasnik pri zapisu objekta da se on dopisuje na vec predhodno upisane objekte. Kada pozovem metodu da sacuva objekat on sacuva objekat ali predhodne objekte izbrise .

Code:
try{FileOutputStream fileOut =
                 new FileOutputStream("Vlasnik.ser");
                 ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(vl);
            out.close();
            fileOut.close();
        }catch( Exception ex){
            ex.printStackTrace();
        }   


Isto mi se desava i ako pojedinacno objekte zapisujem ili ako zapisujem preko kolekcija

Da li postoji mozda neki drugi nacin na koji mogu da trajno sacuvam podatke o objektu koje unesem tokom rada programa. Baze podataka su resenje i ucim ih cim zavrsim ovaj zadatak ali do tada da li postoji drugi nacin da sacuvam objekte i podatke, da se ne izbrisu pri zatvaranju programa vec da ostanu zapisani i da ih mogu pri sledecem pokretanju programa koristiti. Zapis podataka u fajl i citanje sa njega pri sledecem pokretanju je verovatno resenje ali imam problem pri zapisu podataka koji sam napisao na pocetku .

Svaki predlog ce dobro doci...

 
Odgovor na temu

Texas Instruments

Član broj: 227540
Poruke: 263
82.117.201.*



+61 Profil

icon Re: Pisanje objekata u fajl?25.04.2014. u 13:05 - pre 83 meseci
Pogledaj odgovor http://stackoverflow.com/quest...nding-to-an-objectoutputstream
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.static.isp.telekom.rs.



+45 Profil

icon Re: Pisanje objekata u fajl?25.04.2014. u 14:23 - pre 83 meseci
Mislim da ce mi resiti problem , probacu veceras kada stignem sa posla. Trazio sam na njihovom sajtu i procitao dosta slicnih problema ali nisam naisao na ovu temu koja ce verovatno resiti problem. Hvala puno
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Pisanje objekata u fajl?26.04.2014. u 19:55 - pre 83 meseci
Pozdrav, mislio sam da sam resio problem pisanja Objekata u fajla ali izgleda da jos nesto fali. Objekti mi se dopisuju u fajl ali postoji problem sa ocitavanjem tih objekata, samo prvi mogu da ocitam. Probao sam na sve nacine na koje sam nasao po internetu ali ili ocita samo prvi objekat ili javi gresku. Evo kod za pisanje i citanje koji koristim, samo jedan od desetine koje sam pokusao, spojio sam ovde i citanje i pisanje inace sam radio preko dve metode, ali isto se desava...

Code:
public void citanjePisanjeVlasnik(){
        
           Vlasnik PP=new Vlasnik("Pera Peric","Novi Sad","065222555","Student");
        Vlasnik LL=new Vlasnik("Laza Lazic","Beograd","0693334444","Radnik");
        List<Vlasnik> listaVlasnik=Arrays.asList(PP,LL);
        
        try{FileOutputStream fileOut =
                 new FileOutputStream("Vlasnik.ser",true);
                 ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(listaVlasnik);
            
            out.close();
        }catch( Exception ex){
            ex.printStackTrace();
        }    

         try{ FileInputStream filein=new FileInputStream("Vlasnik.ser");
                     ObjectInputStream in=new ObjectInputStream(filein);
        
            while((Vlasnik vlasnik=(Vlasnik)in.readObject())!=null){
            
             System.out.println(((Vlasnik)vlasnik).toString());
         
           }
        
        in.close();
        
        }catch(Exception ee){
            ee.printStackTrace();
        }


Sada po forumima ima nekoliko vrsta resenja,probao sam svako ali uvek najvise jedan objekat ocitam. ObjectOutputStream zapise objekte ali pri citanju se javlja problem. While petlja mislim da prvi put ispuni uslov ali u telu ako pokusam da ocitam objekte ne uspeva mi, a pri sledecem pozivu while petlje javlja gresku java.io.StreamCorruptedException , pokusao sam sa predlozima za resavanje te greske ali ne ide. Evo jos par nacina na koje sam pokusao citati listu objekata ali bezuspesno
Code:
ObjectInputStream in = null;
            
            try {
                
               in = new ObjectInputStream(new FileInputStream("Vlasnik.ser"));
                
                Object obj = null;
           
                while ((obj = in.readObject()) != null) {
                    
                    if (obj instanceof Vlasnik) {
                        Vlasnik vl=(Vlasnik)in.readObject();
                        listaVlasnik.add(vl);
                        System.out.println(((Vlasnik)obj).toString());
                        System.out.println(listaVlasnik.size());
                    }
                    
                }
                
            
            } catch (Exception exx) {  
                exx.printStackTrace();
                }
            
                } 

Na ovom kodu isto prodje while i if , i posle toga bilo sta sa citanjem javlja gresku ... uradio sam implementaciju implements Serializable u klasi Vlasnik i u test klasi.

Mislim da je pre problem pri zapisu , mozda nesto ne radim dobro kada zapisujem pa se kasnije javi problem ili pri kastovanju.
Sada ne znam da li treba da se ocita cela lista odjednom ili da se cita objekat po objekat.

Pokusao sam i sam ovom listom ali se isto desava.
Code:
ObservableList<Vlasnik> listaVlasnik=FXCollections.observableArrayList();


Vidim po internetu dosta slicnih pitanja i odgovora ali vise nemam ideju sta da probam, mozda sam u silnim kombinacijama na neki sitan a bitan detalj zaboravio pa onda ne radi, da li ima jos neko bitno pravilo za serializaciju deserializaciju....

 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Pisanje objekata u fajl?27.04.2014. u 10:12 - pre 83 meseci
Resavao sam problem i mislim da se greska javlja pri ponovnom dodavanju objekata u fajl.
Kada ovako upisujem objekte u fajl upisu se 3 objekta , pri ponovnom pozivanju metode upisu se opet ova 3 ali se stari brisu , pa uvek budu 3 objekta

Code:
 public void actionSacuvajVlasnik(){
        
           Vlasnik PP=new Vlasnik("Pera Peric","Novi Sad","065222555","Student");
        Vlasnik LL=new Vlasnik("Laza Lazic","Beograd","0693334444","Radnik");
        Vlasnik LP=new Vlasnik("Laza Lazic","Beograd","0693334444","Radnik");
        List<Vlasnik> listaVlasnik=Arrays.asList(PP,LL,LP);
        
       ObjectOutputStream outputStream = null;
        
        try {
            
            outputStream = new ObjectOutputStream(new FileOutputStream("Vlasnik.ser"));
            
            
            outputStream.writeObject(PP);
            outputStream.writeObject(LP);
            outputStream.writeObject(LL);
            
            
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.flush();
                    outputStream.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
 }      
 }


Za citanje objekata koristim
Code:
public void ucitajVlasnikeIzFajla() {
        
         ObjectInputStream inputStream = null;
         
         try {
             
             inputStream = new ObjectInputStream(new FileInputStream("Vlasnik.ser"));
             
             Object obj = null;
             
             while ((obj = inputStream.readObject()) != null) {
                 
                 if (obj instanceof Vlasnik) {
                 
                     System.out.println(((Vlasnik)obj).getPrezimeIme());
                 }
                 
             }
             
         
         } catch (EOFException ex) {  
             System.out.println("Kraj Datoteke.");
         } catch (ClassNotFoundException ex) {
             ex.printStackTrace();
         } catch (FileNotFoundException ex) {
             ex.printStackTrace();
         } catch (IOException ex) {
             ex.printStackTrace();
         } finally {
             try {
                 if (inputStream != null) {
                     inputStream.close();
                 }
             } catch (IOException ex) {
                 ex.printStackTrace();
             }
         }

Ocitaju se tri objekta koja su u fajlu i ispisu.



Ako u metodi za pisanje zamenim putanju out sa ovim kodom ,
Code:
outputStream = new ObjectOutputStream(new FileOutputStream("Vlasnik.ser",true));

dopisivanje objekata radi. Posle 3 poziva metoda u fajlu ce biti 9 objekata
ali pri citanju ocita mi prva 3 objekta koja su upisana , javi gresku java.io.StreamCorruptedException
i oznaci mi ovaj deo koda
Code:
while ((obj = inputStream.readObject()) != null) {


Ono sto je upisano pri prvom pozivanju metode za pisanje objekata ocita(3 objekta), kada treba da ocita ono sto je dodato(upisano) posle drugog pozivanja metode za pisanje objekata, tu javi gresku.

Da li je nekome poznat ovakav problem ili ima bilo kakav predlog gde je greska?

 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Pisanje objekata u fajl?27.04.2014. u 15:01 - pre 83 meseci
Definitivno je resenje na linku koji je Texas Instruments ostavio, samo nije mi jasno gde trebam tu klasu i metodu da implementiram ili napisem. Da proveri da li postoje podaci u fajlu , da ne zapisuje podatke stvarajuci novi tok podataka i dopisivajuci taj novi tok u produzetak postojecih objekata vec samo objekte da dopise

Code:
public class AppendingObjectOutputStream extends ObjectOutputStream {

          public AppendingObjectOutputStream(OutputStream out) throws IOException {
            super(out);
          }

          @Override
          protected void writeStreamHeader() throws IOException {
            // do not write a header, but reset:
            // this line added after another question
            // showed a problem with the original
            reset();
          }

        }


Da li treba da napravim celu klasu ovako ili samo neki metod da ubacim negde u moj kod ... gde da napisem ovaj kod da bi imao efekta... izvinjavam se na pisanju ovolikom za ovaj problem ali me bas nervira ovo sto ne radi a ne znam sta vise da probam.
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Pisanje objekata u fajl?27.04.2014. u 17:01 - pre 83 meseci
Reseno!!!

Evo i metode koja je bila problematicna ,pa ako nekome nekad zatreba,

Code:
    public static void UpisiVlasnika (String fajl, Object objekat, boolean append){
        File file = new File (fajl);
        ObjectOutputStream out = null;

        try{
            if (!file.exists () || !append) out = new ObjectOutputStream (new FileOutputStream (fajl));
            else out = new AppendableObjectOutputStream (new FileOutputStream (fajl, append));
            out.writeObject(obj);
            out.flush ();
        }catch (Exception e){
            e.printStackTrace ();
        }finally{
            try{
                if (out != null) out.close ();
            }catch (Exception e){
                e.printStackTrace ();
            }
        }
    }


Uglavnom sam sam pisao i odgovarao ali Texas Instruments me je uputio na pravi put.Jos bi se sigurno mucio da nisam ovde pitao.

 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 793
..ppoe.dyn.broadband.blic.net.



+61 Profil

icon Re: Pisanje objekata u fajl?28.04.2014. u 14:09 - pre 83 meseci
E ovo je ono zbog cega me java (ponekad) nervira; to je po meni i velika mana kao jezika.

ObjectOutputStream i AppendableObjectOutputStream... ima li jos koji? Mislim, toliko gubljenje u klasama (kvantitetu), da se covek upita gde je zalutao?
Pod parolom robusnosti(sigurnosti) resursa(sistema/masine) otislo se u totalnu krajnost, programeru se nacisto amputira mozak i intelekt. Sta ce mu znanje programiranja (nemo' se mucis dzaba), java ima za sve KLASU.
Prosto se provlaci stanoviste da je OSTRICA programera opasna i nepozeljna; gde se ostavi prostora/mogucnosti da programer sam nesto izmozga, tu se potencijalno krije opasnost (po sistem/masinu). Posten programer ne treba da misli; on samo treba da kopa (i nadje) odgovarajucu klasu.
Pih...

Pozz

P.S. casperns2, svaka tebi cast, guras li guras
 
Odgovor na temu

casperns2
Full Stack Java Web Developer
Novi Sad

Član broj: 288154
Poruke: 227
*.dynamic.sbb.rs.



+45 Profil

icon Re: Pisanje objekata u fajl?28.04.2014. u 17:16 - pre 83 meseci
Guram nekako za sad, jos da ne moram da radim posao koji radim islo bi to 2-3 puta brze, ovako me ubija manjak vremena za programiranje,samo uvece kad vec budem dosta iscrpljen od redovnog posla.
 
Odgovor na temu

[es] :: Java :: Pisanje objekata u fajl?

[ Pregleda: 2133 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.