Zapis do pliku(obiekt)

0

Cześć, mam problem z metodą ZapiszDoPliku, która zapisuje obiekt klasy Lista, mianowicie dostaje plik, w którym jest ciąg znaków, ale nie można nic odczytać. Podejrzewam, że problem to źle napisana metoda, ale nie mam pojęcia gdzie popełniłem błąd.

package pl.samprojektuje.naukajava;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;


public class  Lista implements Serializable {

    private  int[] liczby;
    private final int pojemność;
    private  int rozmiar;
    private  int  ostatniIndeks;

    Lista(int pojemność) {
        this.pojemność = pojemność;
        this.liczby = new int[pojemność];
        this.rozmiar = 0;
    }


    int dodajElement(int liczbaDodawana)  {
        if (rozmiar == pojemność) {
            throw new IllegalArgumentException("nie można dodać więcej elementów do tablicy");
        }
        liczby[rozmiar++] = liczbaDodawana;
        ostatniIndeks = rozmiar;
        return liczbaDodawana;

    }


    public int getElementLiczby(int index) {
        return liczby[index];
    }



    int znajdź(int szukanaLiczba) {
        for (int i = 0; i < rozmiar; i++) {

            if (liczby[i] == szukanaLiczba) {
                return i;
            }

        }

        return -1;
    }


    String pisz() {
        String atrybutyListy = String.format("Lista: \n pojemność:  %d  \n rozmiar:   %d \n Elementy: ", pojemność, ostatniIndeks);
        System.out.print(atrybutyListy);
        for (int i = 0; i < ostatniIndeks; i++) {
            System.out.print(liczby[i] + " ");
        }
        System.out.println(" ");

        return atrybutyListy;


    }

    void usunPierwszy(int liczbaUsuwana) {
        int indexPowtórzenia = 0;
        int ileRazy = 0;
        for (int i = 0; i <rozmiar; i++) {
            if (liczby[i] == liczbaUsuwana) {
                ileRazy++;
                if (ileRazy == 2) {
                    break;
                }
                indexPowtórzenia = i;

            }
        }
        ostatniIndeks = rozmiar-1;
        int[] nowaTablica = new int[ostatniIndeks];
        int n = 0;
        for (int k = 0; k <ostatniIndeks; k++) {
            nowaTablica[k] = liczby[k + n];
            if (indexPowtórzenia == k) {
                n = 1;
                nowaTablica[k] = liczby[k + n];
            }
        }

        liczby = new int[ostatniIndeks];

        for (int i = 0; i<ostatniIndeks;i++){
            liczby[i] = nowaTablica[i];
        }



    }

    void usunPowtorzenia() {
        for (int i = 0; i < ostatniIndeks; i++) {
            for (int j = i+1; j < ostatniIndeks; j++){
                if(liczby[i]==liczby[j]){
                 liczby[j] = liczby[ostatniIndeks-1];
                 ostatniIndeks--;
                 j--;
                }
            }

        }
        int [] tab1 = Arrays.copyOf(liczby,ostatniIndeks);
        System.out.println("Tablica bez duplikatów: ");
        liczby = new int[ostatniIndeks];
        for (int i = 0; i<ostatniIndeks;i++){
            liczby[i] = tab1[i];
        }


    }
    void odwroc(){
        int tmp = 0;
        int [] array2 = new int[ostatniIndeks];

    for (int i = ostatniIndeks-1;i>=0;i--){
        array2[tmp] = liczby[i];
        tmp++;
    }

    for (int k = 0;k<ostatniIndeks;k++){
        liczby [k] = array2[k];
    }

    }

    void zapiszDoPliku(Lista l, String nazwa) {

        try{
            FileOutputStream fs = new FileOutputStream(nazwa);
            ObjectOutputStream o = new ObjectOutputStream(fs);
            o.writeObject(l);
            fs.close();
            o.close();
            }
        catch(Exception e){
            e.getMessage();
        }
    }
}

package pl.samprojektuje.naukajava;

public class main {

    public static void main(String[] args)  {
    Lista l = new Lista(10);

    for (int i = 0; i<5;++i){
        l.dodajElement((1<<i));
    }
    l.dodajElement(2);
    l.dodajElement(1);
    l.dodajElement(1);
    l.pisz();
    l.usunPierwszy(2);
    l.pisz();
    l.usunPowtorzenia();
    l.pisz();
    l.odwroc();
    l.pisz();
    l.zapiszDoPliku(l,"plik.txt");










    }
}
3

która zapisuje obiekt klasy Lista, mianowicie dostaje plik, w którym jest ciąg znaków, ale nie można nic odczytać

Co to znaczy że nie można odczytać? Jeśli chodzi Ci o to że to są takie dziwne znaczki, to na typ polega serializacja w Javie, zapisujesz do postaci binarnej. To nie jest JSON ani XML.
Poza tym
1)Używaj try-with-resources i preferuj pakiet NIO nad IO (np.Files.newOutputStream())
2)Używaj serialUuid
3)Nazwy metod , zmiennych, klas etc. po angielsku

0

Jest jakaś możliwość zapisania obiektu przez FileWriter??

2

Myśle że nadal nie rozumiesz problemu. Problem polega na tym, CO ten writer ci zapisze do pliku. Domyślnie Java serializuje do specjalnego binarnego formatu. Jeśli ci on nie odpowiada, to musisz skonwertować swoje obiekty na cos innego (XML, JSON?) i takiego stringa zapisać do pliku.

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