[JAVA] Jak dopisac do ArrayList odczytane dane z pliku

0

Witam.
Jest to nowa wersja tematu:
[JAVA] Jak zapisac i odczytac poprawnie ArrayList
Ponizewaz nie uzyskalem odpowiedzi na poprzedni problem, a juz sie z nim uporalem. To zamieszczam opis nowego problemu.

fg

Mam Aplet z GUI, w ktorym tworze sobie baze pytan i odpowiedzi do chatbota. Baza jest w pliku java.dat, przyklad:

PYTANIE
czesc
jak sie masz
ODPOWIEDZ
Witaj uzytkowniku
Ja swietnie, a ty?

Aplet ma mozliwosci:

  • dodawania wierszy
  • usuwania
  • wyszukiwania
  • aktualizacji
  • wyswietl wszystko

PROBLEM:
Aplet zapisuje poprawnie dane do pliku. Problem w tym, ze po odczycie pliku, do bazy dodaje tylko ostatnie zapytanie.
Przyklad:

Dane z pliku:
PYTANIE
a

PYTANIE
b

Dane po odczycie, dodane do bazy:
PYTANIE
b

Moj kod:


import java.awt.;
import java.applet.
;
import javax.swing.;
import java.io.
;
import java.io.PrintWriter;
import java.awt.event.;
import javax.swing.event.
;
import java.net.URL;
import java.util.*;

public class PanelAplet3 extends JApplet
{
ArrayList<Dane2> dane2 = new ArrayList<Dane2>();
Dane2 nowyDane3 = new Dane2();
WczytywanieDanych2 wczytywanie = new WczytywanieDanych2();
Operacje2 szukanieDane = new Operacje2();

    private static String znak = "";
private static String[] paramWyszukDane;
private static int wybor;
private static String pyt1;
private static String pyt2;
private static String pyt3;
private static String pyt4;
private static String odp1;
private static String odp2;
private static String odp3;
private static String odp4;

JButton b1;//Wyswietl wszystkie dane
JButton b2;//Dodaj dane
JButton b3;//Czysc Okno
JButton b4;//Usun
JButton b5;//Znajdz i aktualizuj
JButton b6;//Szukaj
JButton b7;//Odczyt
JButton b8;//Zapis

TextArea tA;
TextArea tA2;

JTextField tfP1;
JTextField tfP2;
JTextField tfP3;
JTextField tfP4;

JTextField tfO1;
JTextField tfO2;
JTextField tfO3;
JTextField tfO4;

JTextField Znajdz;
JTextField Aktualizacja;


JLabel label1;
JLabel label2;

public void init()
{
    
    System.out.println("METODA INIT");
    System.out.println(" ");

    setLayout(null);
    setSize(800,600);
    

    label1 = new JLabel("Pytanie");
    add(label1);
    label1.setBounds(10,10,150,25);

        tfP1 = new JTextField();
        add(tfP1);
        tfP1.setBounds(10, 50, 320, 25);

        tfP2 = new JTextField();
        add(tfP2);
        tfP2.setBounds(10, 90, 320, 25);

        tfP3 = new JTextField();
        add(tfP3);
        tfP3.setBounds(10, 130, 320, 25);

        tfP4 = new JTextField();
        add(tfP4);
        tfP4.setBounds(10, 170, 320, 25);

    label2 = new JLabel("Odpowiedz");
    add(label2);
    label2.setBounds(10,210,150,25);

        tfO1 = new JTextField();
        add(tfO1);
        tfO1.setBounds(10, 250, 320, 25);

        tfO2 = new JTextField();
        add(tfO2);
        tfO2.setBounds(10, 290, 320, 25);

        tfO3 = new JTextField();
        add(tfO3);
        tfO3.setBounds(10, 330, 320, 25);

        tfO4 = new JTextField();
        add(tfO4);
        tfO4.setBounds(10, 370, 320, 25);

    b5 = new JButton("Aktualizuj");
    add(b5);
    b5.setBounds(210,410,120,25);

    b6 = new JButton("Szukaj");
    add(b6);
    b6.setBounds(10,410,120,25);

        Znajdz = new JTextField("Wpisz co chcesz znalezc...");
        add(Znajdz);
        Znajdz.setBounds(10,445,320,25);

        Aktualizacja = new JTextField("Wpisz zamiennik dla znalezionego pola...");
        add(Aktualizacja);
        Aktualizacja.setBounds(10,475,320,25);

    b1 = new JButton("Wyswietl wszystkie dane");
    add(b1);
    b1.setBounds(390,520,180,25);

    b2 = new JButton("Dodaj dane");
    add(b2);
    b2.setBounds(110,10,150,25);

    tA2 = new TextArea();
    add(tA2);
    tA2.setBounds(350, 10, 400, 140);

    tA = new TextArea();
    add(tA);
    tA.setBounds(350, 150, 400, 350);

    b3 = new JButton("Czysc Okno");
    add(b3);
    b3.setBounds(580,520,120,25);

    b4 = new JButton("Usun wartosc");
    add(b4);
    b4.setBounds(110,510,120,25);

    b7 = new JButton("Odczyt Danych");
    add(b7);
    b7.setBounds(10,550,120,25);

    b8 = new JButton("Zapis Danych");
    add(b8);
    b8.setBounds(210,550,120,25);
    
        

}
public void start()
{
    action();
    tA.setText("");
    tA2.append("Witam w Panelu Zarzadzania..."+"\n");
    
    
}
public void stop()
{
    
}
public void destroy()
{

}

public void action()
{
    ActionListener b1AL = new ActionListener()
    {
        //Wyswietl wszystkie dane
        public void actionPerformed(ActionEvent e)
        {
                tA2.setText("");
                tA.setText("");
                if (dane2.isEmpty())
                {
                    tA2.append("Brak danych na liście!");
                    
                }
                else
                {
                    for (int i = 0; i < dane2.size(); i++)
                    dane2.get(i).wyswietlInformacje();
                    tA2.append("Wyswietlenie danych z bazy..."+"\n");
                    
                }
        }
    };
    b1.addActionListener(b1AL);

    ActionListener b2AL = new ActionListener()
    {
        //Dodaj dane
        public void actionPerformed(ActionEvent e)
        {
                tA2.setText("");
                try
                {
                    tA2.append("Dodawanie danych:"+"\n");
                    nowyDane3 = new Dane2();

                wczytywanie.wczytajDane();
                nowyDane3.ustawDane(wczytywanie);
                dane2.add(nowyDane3);

                System.out.println("Dodawanie danych zakończone!");
                tA2.append("Dodawanie danych zakonczone!"+"\n");
                }catch(IOException e2)
                {
                    System.out.println("Blad!"+e2);
                }
        }
    };
    b2.addActionListener(b2AL);

    ActionListener b3AL = new ActionListener()
    {
        //Czysc Okno
        public void actionPerformed(ActionEvent e)
        {
                tA.setText("");
        }
    };
    b3.addActionListener(b3AL);

    ActionListener b4AL = new ActionListener()
    {
        //Usun
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("Ktora pozycje kasowac?");

            tA2.setText("");
            tA.setText("");
            tA2.append("Usuwanie"+"\n");
            tfP1.setText("");
            try
            {
                nowyDane3 = new Dane2();

                paramWyszukDane = wczytywanie.pobierzParamSzukania();
                szukanieDane.wyszukajDane(dane2, paramWyszukDane);
                tA.setText("Usunieto:"+"\n");
                int[] temp2 = szukanieDane.wyszukajDane(dane2, paramWyszukDane);


                    nowyDane3 = dane2.remove(temp2[0]);


            }catch(IOException e4)
                {
                    System.out.println("Blad!"+e4);
                }
            catch(IndexOutOfBoundsException e4)
            {
                System.out.println("Nie ma takiej pozycji"+e4);
            }
        }
    };
    b4.addActionListener(b4AL);

    ActionListener b5AL = new ActionListener()
    {
        //Znajdz i aktualizuj
        public void actionPerformed(ActionEvent e)
        {
            tA2.setText("");
            tA.setText("");

                        try
                        {
                            tA2.append("Wyszukaj i aktualizuj"+"\n");
                            System.out.println("--> Wyszukaj dane i aktualizuj <--");

                            paramWyszukDane = wczytywanie.pobierzParamSzukania();
                            System.out.println("********Wyniki:********");

                            szukanieDane.wyszukajDane(dane2, paramWyszukDane);
                            System.out.println("********Koniec********");

                            

                            tA2.append("Zmieniono pole."+"\n");
                            tA.append(Aktualizacja.getText());
                            pyt1 = Aktualizacja.getText();
                            
                            tA2.setText("Zaktualizowano pole"+"\n");
                           
                            System.out.println();

                            int[] temp = szukanieDane.wyszukajDane(dane2, paramWyszukDane);

                            if(temp.length>0)

                        nowyDane3 = dane2.get(temp[0]);
                        nowyDane3.aktualizacja(pyt1/*, pyt2, pyt3, pyt4, odp1, odp2, odp3, odp4*/);
                        tA.setText("Nowa wartosc pola:"+"\n");
                        nowyDane3.wyswietlInformacje();

                        }catch(IOException e5)
                        {
                            System.out.println("Blad!: "+e5);
                        }
        }
    };
    b5.addActionListener(b5AL);

    ActionListener b6AL = new ActionListener()
    {
        //Szukaj
        public void actionPerformed(ActionEvent e)
        {
            tA2.setText("");
            tA.setText("");
            try
            {
                tA2.append("Wyszukiwanie danych: "+"\n");
                System.out.println("--> WYSZUKIWANIE Danych <--");
                paramWyszukDane = wczytywanie.pobierzParamSzukania();
                szukanieDane.wyszukajDane(dane2, paramWyszukDane);

            }catch(IOException e6)
            {
                System.out.println("Blad!: "+e6);
            }
        }
    };
    b6.addActionListener(b6AL);

    ActionListener b7AL = new ActionListener()
    {
        //Odczyt Danych
        public void actionPerformed(ActionEvent e)
        {
                Odczyt();
        }
    };
    b7.addActionListener(b7AL);

    ActionListener b8AL = new ActionListener()
    {
        //Zapis Danych
        public void actionPerformed(ActionEvent e)
        {
            Zapis();
        }
    };
    b8.addActionListener(b8AL);

}


public void Odczyt()
{
    System.out.println("metoda Odczyt");
    InputStream strumien = null;

tA.setText("");

    try
    {
      
                wczytywanie.wczytajDane2();
                nowyDane3.ustawDane(wczytywanie);
                dane2.add(nowyDane3);
        System.out.println("Baza.dat z komputera");
        System.out.println(" ");
    }catch(IOException e)
    {
        System.out.println("Pliku nie znaleziono: "+e);
        tA2.append("Pliku nie znaleziono: "+e);
    }
}



public void Zapis()
{
    System.out.println("METODA ZAPIS");
    System.out.println(" ");
    PrintWriter zapis = null;


        try
        {
            zapis = new PrintWriter(new FileWriter("src/java.dat"));
            tA2.append("Zapis do pliku"+"\n");

            for (int i = 0; i < dane2.size(); i++)
            {
                dane2.get(i).wyswietlInformacje();
            
                zapis.write("PYTANIE"+"\n");
            zapis.write(dane2.get(i).pyt1+"\n");
            
            }
            
        } catch (IOException e)
        {
            System.out.println("Pliku nie udalo sie otworzyc: " + e.getLocalizedMessage());
            tA2.append("Pliku nie udalo sie otworzyc: "+e.getLocalizedMessage());
            System.exit(1);
        }
    

    zapis.close();
}


class WczytywanieDanych2

{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

public void wczytajDane() throws IOException, NumberFormatException
{
    System.out.println("Podaj pyt1: ");

    tA2.append(tfP1.getText()+"\n");
    pyt1=tfP1.getText();
    tfP1.setText("");

    System.out.println();
}

public void wczytajDane2() throws IOException, NumberFormatException
{

    
    System.out.println();

    InputStream strumien = null;
    try
    {
        strumien = new FileInputStream("src/java.dat");

        String linia = "";
        BufferedReader czytaj = new BufferedReader(new InputStreamReader(strumien));
        while((linia = czytaj.readLine())!=null)

        {
            tA.append("-----------");
            System.out.println(linia);
            tA.append(linia + "\n");

            pyt1=linia;

        }

        System.out.println("Baza.dat z komputera");
        System.out.println(" ");
    }catch(IOException e)
    {
        System.out.println("Pliku nie znaleziono: "+e);
        tA2.append("Pliku nie znaleziono: "+e);
    }
}

public String[] pobierzParamSzukania() throws IOException
{
    
    System.out.print("Podaj pyt1: ");
    
    tA2.append("Znalezione wyniki w tabeli ponizej."+"\n");
    
    pyt1 = Znajdz.getText();

    
    String parametry[] = {pyt1};

    return parametry;
}


protected String pyt1  = "";
protected String pyt2 = "";
protected String pyt3 = "";
protected String pyt4 = "";

protected String odp1 = "";
protected String odp2 = "";
protected String odp3 = "";
protected String odp4 = "";

}

class Dane2

{

public Dane2() {}

public Dane2(String PYTANIE, String pyt1, String pyt2, String pyt3, String pyt4, String ODPOWIEDZ, String odp1, String odp2, String odp3, String odp4)
{
    this.PYTANIE = PYTANIE;
    this.pyt1 = pyt1;
    this.pyt2 = pyt2;
    this.pyt3 = pyt3;
    this.pyt4 = pyt4;
    this.ODPOWIEDZ = ODPOWIEDZ;
    this.odp1 = odp1;
    this.odp2 = odp2;
    this.odp3 = odp3;
    this.odp4 = odp4;
}

public void ustawDane(WczytywanieDanych2 noweDane)
{
    
    this.pyt1 = noweDane.pyt1;
    this.pyt2 = noweDane.pyt2;
    this.pyt3 = noweDane.pyt3;
    this.pyt4 = noweDane.pyt4;
    
    this.odp1 = noweDane.odp1;
    this.odp2 = noweDane.odp2;
    this.odp3 = noweDane.odp3;
    this.odp4 = noweDane.odp4;
}

public Dane2 dodajDane2()
{
    return new Dane2(this.PYTANIE,this.pyt1,this.pyt2,this.pyt3,this.pyt4,this.ODPOWIEDZ,this.odp1,this.odp2,this.odp3,this.odp4);
}

public void wyswietlInformacje()
{
    System.out.println("PYTANIE: " + PYTANIE);
    System.out.println("pyt1: " + pyt1);
    tA.append(PYTANIE+"\n");
    tA.append(pyt1+"\n");
    
    System.out.println();
}

    public void aktualizacja(String pyt1/*, String pyt2, String pyt3, String pyt4, String odp1, String odp2, String odp3, String odp4*/)
{
    
    this.pyt1 = pyt1;

}

    protected String PYTANIE = "PYTANIE";
protected String pyt1;
protected String pyt2;
protected String pyt3;
protected String pyt4;
protected String ODPOWIEDZ = "ODPOWIEDZ";
protected String odp1;
protected String odp2;
protected String odp3;
protected String odp4;

}
class Operacje2
{

public int[] wyszukajDane(ArrayList<Dane2> dane, String parametrWyszukiwania[])
{
    Object listaDane[] = dane.toArray(); //'konwersja' ArrayList<Dane> do zwykłej tablicy

    int licznik; //służy do przeglądania elementów tablicy

    for(licznik = 0; licznik < listaDane.length; licznik++)
    {
        Dane2 dane1 = (Dane2)listaDane[licznik];
        
        
                if(dane1.pyt1.equalsIgnoreCase(parametrWyszukiwania[0]))
        {
            dane1.wyswietlInformacje();
            //wyszukanePozycje[iloscZnalezien] = licznik;
            wyszukanePozycje[0] = licznik;
            //iloscZnalezien++;
        }
                else
                    if(dane1.pyt1.contains(parametrWyszukiwania[0]))
        {
            dane1.wyswietlInformacje();
            wyszukanePozycje[0] = licznik;
        }
        //else
            //System.out.println("Nie ma takich danych!");
    }

//Ponizej zwraca pozycje, ktore znalazlo:
return wyszukanePozycje;
}

private int iloscZnalezien;
private int[] wyszukanePozycje = new int[1]; //pozycje w tablicy do których zapiszemy wyszukane dane

}

}


Prosze o pomoc.

0

brakuje ci zapis.flush()

0

Ah. Dzieki, juz dopisalem. :)
Jednak wciaz problem tkwi w dodaniu do bazy pozostalych linii.

0
 public void wczytajDane2() throws IOException, NumberFormatException
    {

        
        System.out.println();

        InputStream strumien = null;
        try
        {
            strumien = new FileInputStream("src/java.dat");

            String linia = "";
            BufferedReader czytaj = new BufferedReader(new InputStreamReader(strumien));
            while((linia = czytaj.readLine())!=null)

            {
                tA.append("-----------");
                System.out.println(linia);
                tA.append(linia + "\n");

                pyt1=linia;

            }

            System.out.println("Baza.dat z komputera");
            System.out.println(" ");
        }catch(IOException e)
        {
            System.out.println("Pliku nie znaleziono: "+e);
            tA2.append("Pliku nie znaleziono: "+e);
        }
    }

tutaj za każdym razem jak przejdzie pętla while, to zmienna pyt1 jest ustawiana na bieżącą linie, po przeleceniu przez wszystkie linie pliku, pyt1 jest ustawiona na ostatni wers - musisz zmienić ten wers na dodawanie danych do arraylisty.

0

Dzieki za podpowiedz.
Ale w zasadzie juz sam nie wiem jak powinien wygladac ten kod, ktory mi sugerujesz...
Termin mnie goni, dzisiaj musze to zamiescic w pracy dyplomowej. A spedzilem nad tym apletem i jego problemami 2 tygodnie. A z programowania malo rozumiem, ale bylem ambitny i sobie postanowilem napisac wlasnie taka prace, czego teraz zaluje bo mnie to przerasta.
Wiec jesli moglbys mi napisac gotowy kod, a wiem ze nie chetnie sie takie rzeczy robi na polskich forach, bo raczej kazdy chce zmuscic do myslenia tworce programu... to podziękuję za radę (z pewnościa w innych okolicznosciach bym probowal sie zastosowac) i prawdopodobnie usune cala opcje odczytu z pliku, skoro sie nie sprawdza. po prostu sobie odpuszcze. To nie na moja glowe. :-/
Jednak jakbys byl tak laskawy i napisal linie kodu ktora to poprawi, to bylbym bardzo wdzieczny.
Pozdrawiam.

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