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.