JAVA – zapisywanie, dopisywanie i odczytywanie obiektów (pliki)
Zapisywanie, dopisywanie i odczytywanie pojedynczych obiektów z pliku / do pliku oraz odczytywanie wielu obiektów z pliku w języku JAVA bez zastosowania kolekcji (z założeniem, że liczba obiektów jest nie większa niż — tutaj 100):
packageklasy;importjava.io.*;/**
*
* @author Natalia Potoczniak
*/// implements Serializable Trzeba dodać wszędzie, aby móc// zapisywać obietky do pliku.class Towar implementsSerializable{privateString nazwa;privatefloat cena;public Towar(String nazwa,float cena){this.nazwa=nazwa;this.cena=cena;}public Towar(){
nazwa="brak";
cena=0.0f;}publicvoid zmiencene(float cena){this.cena=cena;}publicfloat dajCene(){return cena;}publicvoid zmiennazwe(String nazwa){this.nazwa=nazwa;}publicString dajNazwe(){return nazwa;}publicvoid odcz(){System.out.format("towar: %s, cena: %.2f \n", nazwa, cena);}
@Override
publicString toString(){returnString.format("towar:%s,cena: %.2f \n",nazwa,cena);}}class ElemZam implementsSerializable{private Towar towar;privateint ile;public ElemZam(Towar towar,int ile){this.towar=towar;this.ile=ile;}public ElemZam(Towar towar){this.towar=towar;
ile=1;}publicfloat kosztZamow(){return ile * towar.dajCene();}publicvoid odcz(){System.out.format("\tnazwa: %s, cena:%.2f, liczba sztuk:%d, koszt zamówienia:%.2f \n", towar.dajNazwe(),towar.dajCene(),ile,kosztZamow());}
@Override
publicString toString(){returnString.format("nazwa: %s, cena:%.2f, liczba sztuk:, koszt zamówienia:%.2f \n", towar.dajNazwe(),towar.dajCene(),ile,kosztZamow());}}class Zamowienie implementsSerializable{privateint liczPozZ;private ElemZam[]tab;public Zamowienie(){
tab=new ElemZam[100];
liczPozZ=0;}publicvoid dodaj(ElemZam el){
tab[liczPozZ]= el;
liczPozZ++;}publicfloat kosztCalegoZamow(){float suma=0;for(int i=0; i<liczPozZ; i++){
suma+=tab[i].kosztZamow();}return suma;}publicvoid odcz(){System.out.format("Koszt całego zamówienia wynosi %.2f zł, a na jego poszególne części składa się:\n", kosztCalegoZamow());for(int i=0; i<liczPozZ; i++){
tab[i].odcz();}}}publicclass Main {// Zapisuje dokładnie jeden obiekt do plikupublicstaticvoid zapis(String nazwaPl, Zamowienie z)throwsIOException{ObjectOutputStream pl=null;try{
pl=newObjectOutputStream(newFileOutputStream(nazwaPl));
pl.writeObject(z);
pl.flush();}finally{if(pl!=null)
pl.close();}}// Odczytuje dokładnie jeden obiekt z pliku i wyświetla o nim informacjępublicstaticvoid odczyt(String nazwaPl)throwsIOException,ClassNotFoundException{ObjectInputStream pl2=null;
Zamowienie z =null;try{
pl2=newObjectInputStream(newFileInputStream(nazwaPl));
z=(Zamowienie)pl2.readObject();
z.odcz();}catch(EOFException ex){System.out.println("Koniec pliku");}finally{if(pl2!=null)
pl2.close();}}// Odczytuje wiele obiektów z pliku (wszystkie) i wyświetla o nim informacjępublicstaticvoid odczytCalego(String nazwaPl)throwsIOException,ClassNotFoundException{ObjectInputStream pl2=null;
Zamowienie z =null;try{
pl2=newObjectInputStream(newFileInputStream(nazwaPl));int l=1;while(true){
z=(Zamowienie)pl2.readObject();System.out.println("\nZamówienie "+ l++);
z.odcz();}}catch(EOFException ex){System.out.println("Koniec pliku");}finally{if(pl2!=null)
pl2.close();}}// Dopisywanie do plikupublicstaticvoid dopisanie(String nazwaPl, Zamowienie z)throwsIOException, ClassNotFoundException{// Najwpierw odczytujemy z plkiu to, co było tam wcześniej
Zamowienie[] tab =new Zamowienie[100];// do tablicyObjectInputStream pl2=null;try{
pl2=newObjectInputStream(newFileInputStream(nazwaPl));int l=0;while(true)
tab[l++]=(Zamowienie)pl2.readObject();}catch(EOFException ex){// Program przeskakuje w to miejsce, kiedy dojdzie do końca pliku,// czyli kiedy wszystko już odczyta.// Teraz zamykamy plik, otwieramy w trybie zapisu i wpisujemy// do niego wszystko oraz dopisujemy to, co ma być dodaneif(pl2!=null)
pl2.close();ObjectOutputStream pl=null;try{
pl=newObjectOutputStream(newFileOutputStream(nazwaPl));// Wpisujemy do pliku to, co w nim już byłofor(int i=0; tab[i]!=null; i++)
pl.writeObject(tab[i]);// i dopisujemy nowy obiekt
pl.writeObject(z);
pl.flush();}finally{if(pl!=null)
pl.close();}}}publicstaticvoid main(String[] args)throwsIOException,ClassNotFoundException{
Towar T=new Towar("mleko",2.29f);
Towar T2=new Towar();
Towar T3=new Towar("proszek do pieczenia",0.50f);
Towar T4=new Towar("jajko", 0.20f);
T.zmiencene(2.15f);
T4.zmiencene(0.25f);
T3.zmiencene(T3.dajCene()*1.1f);// podniesienie ceny o 10%
T.zmiennazwe("kakao");
T3.dajNazwe();
T.odcz();
T3.odcz();
ElemZam el =new ElemZam(T, 10);
ElemZam el2 =new ElemZam(T2);
ElemZam el3=new ElemZam(T3,2);
el.odcz();
el2.odcz();
el.kosztZamow();
el3.kosztZamow();
Zamowienie z =new Zamowienie();
z.dodaj(el);
z.dodaj(el2);
z.dodaj(el3);System.out.println(z.kosztCalegoZamow());System.out.println("\n\n************ ZAPIS DO PLIKU");
zapis("plik.dat", z);System.out.println("\n\n************ ODCZYT Z PLIKU");
odczyt("plik.dat");System.out.println("\n\n************ DOPISYWANIE DO PLIKU");
zapis("plik2.dat", z);
Zamowienie z2 =new Zamowienie();
z2.dodaj(el);
z2.dodaj(el);
z2.dodaj(el3);
z2.dodaj(el3);
dopisanie("plik2.dat", z2);
Zamowienie z3 =new Zamowienie();
z3.dodaj(el3);
z3.dodaj(el3);
z3.dodaj(el);
z3.dodaj(el3);
dopisanie("plik2.dat", z3);System.out.println("\n\n************ ODCZYT Z PLIKU KILKU OBIEKTÓW");
odczytCalego("plik2.dat");}}
JAVA – zapisywanie, dopisywanie i odczytywanie obiektów (pliki)
Zapisywanie, dopisywanie i odczytywanie pojedynczych obiektów z pliku / do pliku oraz odczytywanie wielu obiektów z pliku w języku JAVA bez zastosowania kolekcji (z założeniem, że liczba obiektów jest nie większa niż — tutaj 100):