You are on page 1of 8

Ulazno izlazni tokovi (IO Input Output Streams) Serijalizacija (Serialization)

Zadatak 1 Napisati klasu Student koja moe da bude serijalizovana (moe da bude sauvana u fajl kao objekat) i ima: Privatni atribut imePrezime. Privatni atribut poeni (ceo broj). Javne get i set metode za ove atribute. Nedozvoljene vrednosti za imePrezime je null String, a broj poena mora biti u rasponu 0-100. U sluaju unosa ovih vrednosti, potrebno je baciti izuzetak sa odgovarajuom porukom. Redefinisanu toString metodu klase Object koja vraa String sa svim podacima o studentu uz odgovarajuu poruku. Napraviti klasu IspitniRok koja ima: Javnu metodu koja kao ulazni argument prima objekat klase Student i serijalizacijom ga upisuje u fajl student1.out. Javnu metodu koja sa tastature uitava podatke o studentu i serijalizacijom ih upisuje u fajl student2.out. Javnu metodu koja deserijalizacijom uitava podatke o studentima iz fajlova student1.out i student2.out i ispisuje ih na ekranu. Javnu metodu koja deserijalizacijom uitava podatke o studentima iz fajlova student1.out i student2.out i ispisuje na ekranu prosean broj poena. Napraviti klasu TestIspitniRok koja kreira jedan objekat klase IspitniRok i testira njegove metode. Reenje
import java.io.Serializable; public class Student implements Serializable { private String imePrezime; private int poeni; public String getImePrezime() { return imePrezime; } public void setImePrezime(String imePrezime) { this.imePrezime = imePrezime; } public int getPoeni() { return poeni; } public void setPoeni(int poeni) { this.poeni = poeni; } public String toString(){ return "Ime i prezime: "+imePrezime+" Broj poena: "+poeni; } } import java.io.*; public class IspitniRok { public void upisiStudenta1(Student s){ try{ //Otvaranje fajla za upis celih objekata postupkom //serijalizacije. ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("student1.out"))); //Student (objekat klase Student) se upisuje u //fajl (serijalizuje) pozivanjem metode //writeObject. out.writeObject(s); //Zatvaranje fajla. out.close();

}catch(Exception e){ System.out.println("Greska: "+e.getMessage()); }

public void upisiStudenta2(){ try{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("student2.out"))); Student s = new Student(); System.out.print("Unesite ime i prezime studenta:"); s.setImePrezime(br.readLine()); System.out.print("Unesite broj poena studenta:"); s.setPoeni(Integer.parseInt(br.readLine())); out.writeObject(s); out.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } public void ucitajIIspisiStudente(){ try{ //Otvaranje fajla za ucitavanje celih objekata //postupkom deserijalizacije. ObjectInputStream in = new ObjectInputStream( new FileInputStream("student1.out")); //Otvaranje drugog fajla za ucitavanje. ObjectInputStream in2 = new ObjectInputStream( new FileInputStream("student2.out")); //Student (objekat klase Student) se ucitava iz //fajla (deserijalizuje) pozivanjem metode readObject. //Metoda readObject vraca objekat klase Object //pa je potrebno izvrsiti konverziju u klasu //Student. Student s1 = (Student)(in.readObject()); //Ucitavanje drugog studenta iz drugog fajla. Student s2 = (Student)(in2.readObject()); System.out.println(s1); System.out.println(s2); //Zatvaranje fajlova. in.close(); in2.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } public void ucitajIIspisiProsek(){ try{ ObjectInputStream in = new ObjectInputStream( new FileInputStream("student1.out")); ObjectInputStream in2 = new ObjectInputStream( new FileInputStream("student2.out")); Student s1 = (Student)(in.readObject()); Student s2 = (Student)(in2.readObject()); int prosek = (s1.getPoeni()+s2.getPoeni())/2;

System.out.println("Prosecan broj poena je: "+prosek); in.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } } public class TestIspitniRok { public static void main(String[] args) { IspitniRok ir = new IspitniRok(); Student s1 = new Student(); s1.setImePrezime("Zika Lazic"); s1.setPoeni(100); ir.upisiStudenta1(s1); ir.upisiStudenta2(); ir.ucitajIIspisiStudente(); ir.ucitajIIspisiProsek();

} }

Zadatak 2 Napisati klasu Knjiga koja moe da bude serijalizovana (moe da bude sauvana u fajl kao objekat) i ima: Privatni atribut naslov. Privatni atribut ISBN (String). Privatni atribut autor. Javne get i set metode za ove atribute. Nedozvoljene vrednosti za sva tri atributa su null String-ovi. U sluaju unosa ovih vrednosti, potrebno je baciti izuzetak sa odgovarajuom porukom. Redefinisanu metodu toString klase Object koja vraa String sa svim podacima o knjizi uz odogovarajui tekst. Redefinisanu equals metodu klase Object koja kao ulazni argument dobija objekat klase Object. Metoda prvo proverava da li je uneti objekat klase Knjiga, pa ako nije baca izuzetak. Metoda vraa true ako su ISBN i ISBN unete knjige jednaki. Ako ISBN i ISBN unete knjige nisu jednaki metoda vraa false. Napraviti klasu Biblioteka koja ima: Privatni atribut knjige koji predstavlja listu objekata klase Knjiga. Ovu listu je potrebno odmah inicijalizovati. Javnu metodu koja sa tastature uitava sve podatke o knjizi, i dodaje novu knjigu u biblioteku. Dodavanje se vri samo ako u biblioteci ve ne postoji knjiga sa istim ISBN. Ako knjiga sa istim ISBN postoji, potrebno je baciti izuzetak sa odgovarajuom porukom. Javnu metodu koja upisuje (serijalizuje) sve knjige iz biblioteke u fajl biblioteka.out. Javnu metodu koja uitava (deserijalizuje) sve knjige iz fajla biblioteka.out i puni bibilioteku. Pre uitavanja je potrebno izbrisati listu knjiga bibilioteke. Javnu metodu koja na ekranu ispisuje sadraj biblioteke. Ako je biblioteka prazna, ispisuje se poruka o tome. Napraviti klasu TestBiblioteka koja kreira jedan objekat klase Biblioteka, i poziva njegove metode. Reenje
import java.io.Serializable; public class Knjiga implements Serializable{ private String naslov; private String autor; private String ISBN; public String getAutor() { return autor; } public void setAutor(String autor) { if (autor == null) throw new RuntimeException("Autor ne sme da bude null"); this.autor = autor;

} public String getISBN() { return ISBN; } public void setISBN(String isbn) { if (isbn == null) throw new RuntimeException("ISBN ne sme da bude null"); ISBN = isbn; } public String getNaslov() { return naslov; } public void setNaslov(String naslov) { if (naslov == null) throw new RuntimeException("Naslov ne sme da bude null"); this.naslov = naslov; } public String toString(){ return "Naslov: "+naslov+" Autor: "+autor+" ISBN: "+ISBN; } public boolean equals (Object o){ if (!(o instanceof Knjiga)) throw new RuntimeException("Morate uneti objekat klase Knjiga"); Knjiga k = (Knjiga)(o); if (ISBN.equals(k.getISBN())) return true; else return false;

} }

import java.io.*; import java.util.LinkedList; public class Biblioteka { private LinkedList <Knjiga> knjige = new LinkedList <Knjiga>(); public void ucitajKnjiguSaTastature(){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try{ Knjiga k = new Knjiga(); System.out.print("Unesite naslov knjige: "); k.setNaslov(br.readLine()); System.out.print("Unesite autora knjige: "); k.setAutor(br.readLine()); System.out.print("Unesite ISBN knjige: "); k.setISBN(br.readLine()); if (knjige.contains(k)) throw new RuntimeException("Ta knjiga vec postoji u biblioteci"); knjige.add(k); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } public void upisiUFajlSerijalizacijom(){ try{ //Otvaranje fajla za upis celih objekata postupkom //serijalizacije. ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("biblioteka.out"))); //Prolazi se kroz listu knjiga i svaka knjiga //(objekat klase Knjiga) se upisuje u fajl

//(serijalizuje) pozivanjem metode writeObject. for(int i=0;i<knjige.size();i++) out.writeObject(knjige.get(i)); //Zatvaranje fajla. out.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); }

public void ucitajIzFajlaDeserijalizacijom(){ try{ //Otvaranje fajla za ucitavanje celih objekata //postupkom deserijalizacije. ObjectInputStream in = new ObjectInputStream( new FileInputStream("biblioteka.out")); //Brisanje liste knjiga. knjige.clear(); //Prolazi se kroz fajl i svaka knjiga //(objekat klase Knjiga) se ucitava iz fajla //(deserijalizuje) pozivanjem metode readObject. //Metoda readObject vraca objekat klase Object //pa je potrebno izvrsiti konverziju u klasu //Knjiga. Jedini nacin da se nadje kraj fajla //je da se saceka da metoda readObject baci //izuzetak. Zbog toga je while petlja za ucitavanje //uokvirena u try-catch blok. try{ while (true){ Knjiga k = (Knjiga)(in.readObject()); knjige.add(k); } }catch(Exception e){} //Zatvaranje fajla. in.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } public void ispisi(){ if (knjige.size() == 0) System.out.println("Bibilioteka je prazna"); else{ for (int i=0;i<knjige.size();i++) System.out.println(knjige.get(i)); } } } public class TestBiblioteka { public static void main(String[] args) { Biblioteka b = new Biblioteka(); b.ucitajKnjiguSaTastature(); b.ucitajKnjiguSaTastature(); b.ucitajKnjiguSaTastature(); b.upisiUFajlSerijalizacijom(); b.ispisi(); b.ucitajIzFajlaDeserijalizacijom(); b.ispisi(); } }

Zadatak 3 Napraviti javnu klasu Motocikl koja moe da bude serijalizovana i ima:

Privatni atribut marka. Privatni atribut model. Privatni atribut kubikaza koji predstavlja broj kubika motocikla (ceo broj). Odgovarajue javne get i set metode za ove atribute. Nedozvoljene vrednosti a atribute marka i model su null String-ovi a kubikaa mora biti vea od nule. U sluaju unosa ovih nedozovoljenih vrednosti, potrebno je baciti izuzetak sa odgovarajuom porukom. Redefinisanu toString metodu klase Object koja vraa String sa svim podacima o motociklu uz odgovarajuu poruku. Redefinisanu equals metodu klase Object koja kao ulazni argument prima objekat klase Object. Metoda prvo proverava da li je unet objekat klase Motocikl, pa ako nije, baca izuzetak sa odgovarajuom porukom. Ova metoda vraa true ako je vrednost atributa marka, model i kubikaza jednaka marki, modelu i kubikazi motocikla koji je unet kao ulazni argument. U suprotnom, metoda vraa false.

Napraviti javnu klasu BazaMotocikala koja ima: Privatni atribut motocikli koji predstavlja listu objekata klase Motocikl. Javni konstruktor koji inicijalizuje atribut motocikli. Javnu metodu unesiUBazu koja kao ulazni argument prima objekat klase Motocikl i unosi ga u listu. Unoenje se vri samo ako uneta vrednost nije null i ako u bazi ve ne postoji isti motocikl. U suprotnom, baca se izuzetak sa odgovarajuom porukom. Javnu metodu koja upisuje (serijalizuje) sve motocikle iz baze u fajl motocikli.out. Javnu metodu koja uitava (deserijalizuje) sve motocikle iz fajla motocikli.out i puni bazu. Pre uitavanja je potrebno izbrisati bazu. Javnu metodu ispisi koja na ekranu ispisuje podatke o svim motociklima. Napraviti klasu TestBazaMotocikala koja kreira objekat klase BazaMotockala i poziva njegove metode. Reenje
import java.io.Serializable; public class Motocikl implements Serializable{ private String marka; private String model; private int kubikaza; public int getKubikaza() { return kubikaza; } public void setKubikaza(int kubikaza) { if (kubikaza <= 0) throw new RuntimeException("Kubikaza mora biti veca od nule"); this.kubikaza = kubikaza; } public String getMarka() { return marka; } public void setMarka(String marka) { if (marka == null) throw new RuntimeException("Marka ne sme biti null"); this.marka = marka; } public String getModel() { return model; } public void setModel(String model) { if (model == null) throw new RuntimeException("Model ne sme biti null"); this.model = model; } public String toString(){ return "Marka: "+marka+" Model: "+model+" Kubikaza: "+kubikaza; } public boolean equals(Object o){ if (!(o instanceof Motocikl)) throw new RuntimeException("Morate uneti objekat klase Motocikl");

} }

Motocikl m = (Motocikl)(o); if (marka.equals(m.getMarka())&& (model.equals(m.getModel()))&& kubikaza == m.getKubikaza()) return true; else return false;

import java.io.*; import java.util.*; public class BazaMotocikala { private LinkedList <Motocikl> motocikli; public BazaMotocikala(){ motocikli = new LinkedList <Motocikl> (); } public void unesiUBazu(io_serijalizacija.Motocikl m1){ if (m1==null) throw new RuntimeException("Motocikl je null"); if (motocikli.contains(m1)) throw new RuntimeException("Taj motocikl se vec nalazi u bazi"); motocikli.add(m1); } public void upisiUFajlSerijalizacijom(){ try{ ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("motocikli.out"))); for(int i=0;i<motocikli.size();i++) out.writeObject(motocikli.get(i)); out.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } public void ucitajIzFajlaDeserijalizacijom(){ try{ ObjectInputStream in = new ObjectInputStream( new FileInputStream("motocikli.out")); motocikli.clear(); try{ while (true){ Motocikl m = (Motocikl)(in.readObject()); motocikli.add(m); } }catch(Exception e){} in.close(); }catch(Exception e){ System.out.println("Greska: "+e.getMessage()); } } public void ispisi(){ for (int i=0; i<motocikli.size();i++) System.out.println(motocikli.get(i)); } } public class TestBazaMotocikala { public static void main(String[] args){ BazaMotocikala b = new BazaMotocikala();

Motocikl m1 = new Motocikl(); m1.setMarka("Honda"); m1.setModel("CB 750 F"); m1.setKubikaza(748); Motocikl m2 = new Motocikl(); m2.setMarka("Kawasaki"); m2.setModel("ER 5"); m2.setKubikaza(498); b.unesiUBazu(m1); b.unesiUBazu(m2); b.ispisi(); b.upisiUFajlSerijalizacijom(); b.ucitajIzFajlaDeserijalizacijom(); b.ispisi(); } }

You might also like