tjt Posted January 29, 2013 Report Posted January 29, 2013 (edited) //Problema rezolvata.Mersi de ajutor. Edited November 1, 2015 by tjt Quote
u0m3 Posted January 29, 2013 Report Posted January 29, 2013 Google bata-l vina.FileOutputStream(File file, boolean append)With empathetis on append. Quote
M2G Posted January 29, 2013 Report Posted January 29, 2013 Foloseste PrintWriter sau FileWriter care au metode prin care poti face append. PrintWriter are metoda println si FileWriter are metoda writeln.In clasa Scor iti poti face o metoda toString() care sa iti faca un output sub forma de string al scorului, asa cum il doresti tu afisat.Dupa asta foloseste metoda toString pentru a scrie scorurile in fisier cu FileWriter sau PrintWriter.Intrebare: De ce vrei sa salvezi scorurile intr-un fisier text? Ca urmatoarea data cand deschizi jocul sa continui cu scorul precedent? Quote
tjt Posted January 29, 2013 Author Report Posted January 29, 2013 (edited) @um03 si @M2G nu doresc sa folosesc alta metoda ca asa ar fi fost simplu.Doresc sa folosesc ObjectOutputStream si sa le fac append la continutul deja existent(asta imi este cerinta la proiect).Vreau sa stiu daca stiti o metoda mai eficienta,pentru ca nu prea cred ca e normal sa preiau de fiecare data cand deschid jocul toate scorurile.@M2G Urmatoarea data cand deschid jocul scorurile salvate in fisier trebuie clasificate in functie de nume,scor.De exemplu cei care au nume care incepe cu A si scor intre 13-18 afisati intr-un loc,cei cu nume care incepe cu b si scor 6 afisate intr-un loc,etc.Lucrul asta am reusit sa-l fac intr-o alta clasa.LE: Nu pot face append simplu ca la fisiere ce contin text,pentru ca obiectele pe care le salvez sunt serializate mai intai,adica sunt sunt transmise ca serie de octeti intr-un anumit format.Eu daca incerc sa fac append fara sa respect formatul anterior nu reusesc sa salvez nimic.O alta varianta care probabil este si mai eficienta este sa incerc sa aflu care este formatul anterior si sa incerc sa-l implementez,dar nu am gasit nimic. Edited January 29, 2013 by tjt Quote
M2G Posted January 29, 2013 Report Posted January 29, 2013 La ObjectOutputStream ideea e sa nu inchizi streamul decat dupa ce ai scris toate obiectele pentru ca ObjectOutputStream scrie un header in fisier. In momentul in care tu faci new ObjectOutputStream se creaza o alta instanta care isi pune si ea headerul. Deci fisierul se suprascrie.Nu poti sa folosesti mai multe instante de ObjectOutputStream pentru a scrie un fisier pentru ca atunci InputStream-ul nu o sa mai poata sa citeasca.O ideea pentru a creste performanta ar fii sa nu mai tot scrii si citesti obiecte in for.Iti faci un arraylist de obiecte Scor si pentru fiecare obiect Scor il adaugi in arraylist.Scor test = new Scor(bla bla parametrii);Arraylist<Scor> scores = new Arraylist<Scor>();scores.Add(scor);Dupa asta pui pe ObjectOutputStream intreg arraylistul cu obiecte scor in loc sa pui fiecare obiect pe rand.In momentul in care citesti obiectul din fisier o sa iti returneze un singur obiec de tip arraylist.Tot ce trebuie sa faci este sa faci Add la noile scoruri in acel array si sa il scrii inapoi in fisier. Astfel va contine vechiile valori + noile valori la care ai dat Add. Quote
tjt Posted January 29, 2013 Author Report Posted January 29, 2013 Mersi mult de idee. O sa ma documentez asupra arraylist-ului si sper sa reusesc . Quote