Wątek przeniesiony 2014-12-27 22:45 z Java przez bogdans.

Program na zasadzie bilbioteki - funkcja wyszukiwania

2014-12-27 19:16
0

Witam, pisze program dzialajacy na zasadzie bazy danych w javie. Znaczy sie wpisuje sie do niego tytul ksiazki, autora, rok wydania i potem klikamy na przycisk dodaj i zapisuje sie to do pliku tekstowego o nazwie "pierwszy.txt", gdy klikamy na przycisk szukaj pojawia sie Inputbox gdzie po wpisaniu tylko tytulu wyswietla sie reszta informacji czyli autor, rok wydania itp. . Problem jest jednak ze jak wpisze ręcznie do pliku "pierwszy.txt" tytul ksiazki i autora to po kliknieciu na przycisk szukaj i wpisaniu tytulu te informacje sie wyswietlaja, jednak gdy wpisze najpierw w programie te dane i klikne dodaj, to potem mimo iz w pliku tekstowym tytul ksiazki i autor sie pojawia, jednak gdy klikne szukaj jest tak jakby ten plik tekstowy byl pusty. Probowalam to naprawic tak zeby stworzyc dwa pliki tekstowe "pierwzy.txt" i "drugi.txt" i zeby po kliknieciu dodaj najpierw sie zapisywalo do pliku pierwszy.txt a potem przekopiowywalo do pliku drugi.tx i po kliknieciu szukaj juz operowaloby sie na tym pliku drugi.txt jdenak to nic nie daje.


JButton przycisk11 = new JButton("Szukaj");
        przycisk11.setSize(80,50);
        przycisk11.setLocation(370,320);
        add(przycisk11);

        przycisk11.addActionListener(new ActionListener()
        {

            public void actionPerformed(ActionEvent e) {
                HashMap<String, String> map = new HashMap<String, String>();
                 Scanner scan = null;

                    try {
                        scan = new Scanner(new File("drugi.txt"));
                    } catch (FileNotFoundException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                 String tytul;
                 String informacje;

                 while(scan.hasNextLine()){
                     tytul = scan.nextLine();
                     informacje = scan.nextLine();

                     map.put(tytul, informacje);
                 }
                 while((tytul = JOptionPane.showInputDialog("Wpisz tytuł książki")) != null){
                     informacje = map.get(tytul);
                     if ( informacje == null) informacje = "Nie ma książki w bazie danych";
                     JOptionPane.showMessageDialog(null, "Tytuł : " + tytul + '\n' + "" + informacje);
                 }
        }
JButton przycisk10 = new JButton("Dodaj");
        przycisk10.setSize(80,50);
        przycisk10.setLocation(120,320);
        add(przycisk10);
        przycisk10.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e) {

                 String pole = pole_t.getText();
                 String pole1 = pole_s.getText();
                 String pole2 = pole_u.getText();
                 String pole3 = pole_w.getText();

                 String wynik = pole + " \r\n" + pole1 + " " + pole2 + "  " + pole3 + " \r\n";

                 try {

                    Scanner scan = new Scanner(new File("pierwszy.txt"));
                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                 FileWriter fileWritter = null;
                try {
                    fileWritter = new FileWriter("pierwszy.txt",true);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                    BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
                    try {
                        bufferWritter.write(wynik);
                        bufferWritter.close();

                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    try {
                        bufferWritter.close();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    InputStream inStream = null;
                    OutputStream outStream = null;

                        try{

                            File afile =new File("pierwszy.txt");
                            File bfile =new File("drugi.txt");

                            inStream = new FileInputStream(afile);
                            outStream = new FileOutputStream(bfile);

                            byte[] buffer = new byte[1024];

                            int length;
                            //copy the file content in bytes 
                            while ((length = inStream.read(buffer)) > 0){

                                outStream.write(buffer, 0, length);

                            }

                            inStream.close();
                            outStream.close();

                            System.out.println("File is copied successful!");

                        }catch(IOException e1){
                            e1.printStackTrace();
                        }

            }

            private void copyFileUsingStream(File source, File dest) {
                // TODO Auto-generated method stub

            }
        }); 
edytowany 2x, ostatnio: bogdans, 2014-12-27 21:46
!Wstawiaj kod w znaczniki &lt;code=java&gt;&lt;/code&gt; - bogdans 2014-12-27 22:44

Pozostało 580 znaków

2014-12-27 22:41
0

U mnie Twój kod działa (bez pliku drugi.txt). Czy w tytułach "ręcznie" dopisywanych książek są polskie litery?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
sprawdzałam i z polskimi literami i bez i w żadnej z tych opcji nie działa :/ nie wyszukuje tych informacji dla pliku tekstowego w którym dopisywane są one po kliknięciu dodaj. Działa jedynie jak wejde do folderu programu , otworze ten plik i sama wpisze z klawiatury do niego :/ - Edziulka25 2014-12-27 22:57
@Edziulka25 - na temat dyskutujemy w postach; - furious programming 2014-12-27 23:53

Pozostało 580 znaków

2014-12-28 01:04
0

Pewnie źle dopisujesz ręcznie, ten fragment

                 while(scan.hasNextLine()){
                     tytul = scan.nextLine();
                     informacje = scan.nextLine();

wymaga by w pliku była parzysta ilość wierszy. Jeżeli dopisując ręcznie, nie naciśniesz ENTER po dopisaniu wiersza z informacją, to dane dopisane przez program spowodują, że ilość wierszy będzie nieparzysta. Po dopisaniu ręcznym (bez ENTERA) plik wygląda tak:

Lato
Jan Chrzan 2013

Po dopisaniu przez program nowej książki, plik wygląda tak:

Lato
Jan Chrzan 2013Zima
Ewa Zdrzewa 2011

Szukanie wygeneruje wyjątek.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2014-12-28 10:24

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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