[FileReader][Scanner] Odczytanie liczby wierszy i kolumn z pliku tekstowego

0

Witam,
Mam kolejny problem, tym razem z odczytywaniem danych z plików tekstowych.
Mam dwa pliki w formacie:
Plik1:
1 2
1 2 3
Plik 2:
1
1 2
1 2 3 4
Chcę odczytać z łączną liczbę wierszy oraz największą liczbę kolumn. Poniżej mój kod. Obliczanie liczby wierszy działa jednak mam problem z liczbą kolumn- wywala mi wyjątek FileNotFoundException.

Będę wdzięczny za pomoc w rozwiązaniu problemu.
Fragment kodu:

Scanner scan1 = new Scanner(new FileReader(plik1));
            Scanner scan2 = new Scanner(new FileReader(plik2));

            //Sprawdza ile wierszy znajduje się w pierwszym pliku
            int wiersze = 0, kolumny = 0;
            while (scan1.hasNextLine()) {
                wiersze++;
                int licznikKolumn = 0;
                while(scan1.hasNextInt()){
                    licznikKolumn++;
                    scan1.nextInt();
                }
                if(licznikKolumn > kolumny) kolumny = licznikKolumn;
                scan1.nextLine();
            }
            //Sprawdza ile wierszy jest w obu plikach
            while (scan2.hasNextLine()) {
                wiersze++;
                scan2.nextLine();
            }

            System.out.println(wiersze+" "+kolumny);
0

Udało mi się rozwiązać problem. Prosił bym jednak o wyjaśnienie dlaczego nie działa powyższy kod. Poniżej umieszczam moje rozwiązanie.

Scanner scan1 = new Scanner(new FileReader(plik1));
            Scanner scan2 = new Scanner(new FileReader(plik2));
            StringTokenizer token;

            //Sprawdza ile wierszy znajduje się w pierwszym pliku
            int wiersze = 0, kolumny = 0;
            while (scan1.hasNextLine()) {
                wiersze++;
                int licznikKolumn = 0;
                token = new StringTokenizer(scan1.nextLine()," ");
                while(token.hasMoreElements()){
                    licznikKolumn++;
                    token.nextElement();
                }
                if(licznikKolumn > kolumny) kolumny = licznikKolumn;
            }
            //Sprawdza ile wierszy jest w obu plikach
            while (scan2.hasNextLine()) {
                wiersze++;
                int licznikKolumn = 0;
                token = new StringTokenizer(scan2.nextLine()," ");
                while(token.hasMoreElements()){
                    licznikKolumn++;
                    token.nextElement();
                }
                if(licznikKolumn > kolumny) kolumny = licznikKolumn;

            }

            System.out.println(wiersze+" "+kolumny);
0

Ja też nie wierzę w FileNotFoundException.

0

Przepraszam za problem, ale faktycznie pomyliłem wyjątek.
Chodziło o NoSuchElementException: No Line Found.
W takim razie pytanie dlaczego nie znajduje kolejnej linii?

Z rozpędu wpisałem zły opis. Sorry za kłopot.

1

Wyjątek poleci gdy w ostatnim wierszu są tylko liczby, a nie ma Entera na końcu.
Wtedy pętla

                while(scan1.hasNextInt()){
                    licznikKolumn++;
                    scan1.nextInt();
                }

wykorzysta całość pliku i instrukcja

scan1.nextLine();

rzuci wyjątek

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