Porównywarka plików tekstowych

0

Witam wszystkich. Jeśli powielam temat to bardzo przepraszam.
Chciałem zrobić prosty program, który będzie w stanie stwierdzić czy dwa pliki tekstowe są takie same, bądź czy się różnią.
Buttony działają, pola tekstowe też, natomiast problem pojawia się po wpisaniu nazw plików i naciśnięciu przycisku "Porównaj". Wyskakuje 'błąd dostępu do plików'. Pliki znajdują się w tym samym katalogu, w którym jest projekt. Pewnie to jakieś przeoczenie z mojej strony i "głupi" błąd ale dopiero zaczynam. Oto kod:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.io.FileInputStream;

    public class SwingFC implements ActionListener {
        JTextField jtfFirst; //Przechowuje nazwę pierwszego pliku
        JTextField jtfSecond; //Przechowuje nazwę drugiego pliku

        JButton jbtnComp; //Przycisk porównania plików

        JLabel jlabFirst, jlabSecond; //Wyświetlają zachęty
        JLabel jlabResult; //Wyświetla wynik i komunikaty o błędach

        SwingFC() {
            //Tworzy nowy kontener JFrame
            JFrame jfrm = new JFrame("Porównywanie plików");

            //Wybiera FlowLayout jako menedżer układu
            jfrm.setLayout(new FlowLayout());

            //Nadaje oknu początkowe rozmiary
            jfrm.setSize(200, 190);

            //Aplikacja zakończy działanie wraz z zamknięciem okna
            jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            //Tworzy pola tekstowa do wprowadzania nazw plików
            jtfFirst = new JTextField(14);
            jtfSecond = new JTextField(14);

            //Wiąże tekst z tymi polami
            jtfFirst.setActionCommand("plikA");
            jtfSecond.setActionCommand("plikB");

            //Tworzy przycisk "Porównaj"
            JButton jbtnComp = new JButton("Powrównaj");

            //Dodaje obiekt nasłuchujący zdarzeń przycisku "Porównaj"
            jbtnComp.addActionListener(this);

            //Tworzy etykiety
            jlabFirst = new JLabel("Pierwszy plik: ");
            jlabSecond = new JLabel("Drugi plik: ");
            jlabResult = new JLabel("");

            //Umieszcza komponenty w panelu zawartości
            jfrm.add(jlabFirst);
            jfrm.add(jtfFirst);
            jfrm.add(jlabSecond);
            jfrm.add(jtfSecond);
            jfrm.add(jbtnComp);
            jfrm.add(jlabResult);

            //Wyświetla okno
            jfrm.setVisible(true);
        }

        //Porównuje pliki po naciśnieciu przycisku "Porównaj"
        public void actionPerformed(ActionEvent ae) {
            int i = 0, j = 0;

            //Najlpierw sprawdza czy wprowadzone zostały nazwy obu plików
            if (jtfFirst.getText().equals("")) {
                jlabResult.setText("Brak nazwy pierwszego pliku!");
                return;
            }
            if (jtfSecond.getText().equals("")) {
                jlabResult.setText("Brak nazwy drugiego pliku!");
                return;
            }
            //Porównuje pliki. Używa rozszerzonej instrukcji try do zarządzania plikami
            try (FileInputStream f1 = new FileInputStream(jtfFirst.getText());
                 FileInputStream f2 = new FileInputStream(jtfSecond.getText())) {

                //Porównuje zawartość plików
                do {
                    i = f1.read();
                    j = f2.read();
                    if (i != j) break;
                } while (i != -1 && j != -1);
                if (i != j)
                    jlabResult.setText("Pliki są różne.");
                else
                    jlabResult.setText("Pliki są takie same.");
            } catch (IOException exc) {
                jlabResult.setText("Błąd dostępu do pliku!");
            }
        }
        public static void main(String[] args) {
            //Tworzy okno w wątku rozdziału zdarzeń
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new SwingFC();
                }
            });

            }
        }

Mogę prosić o pomoc?
Bedę wdzięczny :)

1

Czy "błąd dostępu do plików" to cały tekst błędu?

1

Pliki znajdują się w tym samym katalogu, w którym jest projekt

A weź może po ludzku użyj JFileChooser i nie będziesz się musiał zastanawiać czy ściezka jest dobra.

2

Przede wszystkim, porównywanie plików w osobnej klasie.
Nawet jakby miała pięć linijek kodu.
Patrzeć się na to nie chce.

0

Dziękuję za komentarze, konstruktywna krytyka jak i wszystkie sugestie zawsze są mile widziane :) Kod pisałem w oparciu o przykład z jednej z książek Herberta Schildta. Wiem, że teoria sama w sobie nic nie da bez ustawicznej praktyki.

2
Silv napisał(a):

Czy "błąd dostępu do plików" to cały tekst błędu?

Kolega traci informację z Exception.
Ma wyjątek, ale z niego nie korzysta.

1

@Radomir93:
Przy problemach tego typu proponuję nauczyć się korzystać z debuggera i zapiąć się na wyjątek, choć powinien być też tekst wyjątku w konsoli IDE

1

Sprostowanie: to nie jest błąd wyrzucany podczas kompilacji, komunikat z "Błędem dostępu do pliku" pojawia się po uruchomieniu programu

2

@Radomir93 no dobra ale czemu robisz

            } catch (IOException exc) {
                jlabResult.setText("Błąd dostępu do pliku!");
            }

Zamiast wypisać całą treść wyjątku i wiedzieć co sie tam stało? Niemniej nadal zajecam użyc JFileChooser

0

Programista zbadał by ten exc.

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