Problem z wyświetleniem danych z pliku txt

0

Hej

Mam problem z wyświetleniem danych z pliku txt, mam taki kod:

public class Duplikaty 
{ 
    static int licznik = 0; 

    public static void main(String[] args)  
    { 
        liczenie(); 
    } 

    public static void liczenie() 
    { 
        File plik = new File("test.txt"); 

        try 
        { 
        BufferedReader czytacz = new BufferedReader(new FileReader(plik)); 

        String wiersz = null; 

        while((wiersz = czytacz.readLine()) != null) 
        { 
        	System.out.println(wiersz);
            ArrayList<String> lista = new ArrayList<String>(); 

            for(int i = 0; i < 100; i++) 

            { 
                lista.add(czytacz.readLine()); 
            } 
            System.out.println(lista.get(0)); 
            for(int i = 0; i < lista.size(); i++) 
            { 
                if(lista.get(i).equals("test1")) 

                { 
                    licznik++; 
                } 
            } 
        } 
        } 
        catch(Exception ex) 
        { 
            ex.printStackTrace(); 
        } 
        System.out.println(licznik); 
    } 
} 

Coś mi nie gra z dwoma rzeczami:

  1.  at Listy.Duplikaty.liczenie(Duplikaty.java:40)
     at Listy.Duplikaty.main(Duplikaty.java:14)```
    

14 - liczenie();
40 - if(lista.get(i).equals("test1"))
Nie rozumiem czemu wyrzuca mi Pointera. Szukałem w sieci na ten temat informacji ale był tam głównie dotyczące tego, że obiekt nie jest zadeklarowany żadną wartością. Ale czasami nie mam początkowej wartości i nie mam tego komunikatu.

  1. W pliku "test.txt" mam dane:
    test1
    test2
    test3
    test4
    test5
    test1
    test1
    test1
    test1
    test1

Na początku programu chcę wylistować cała zawartość ArrayListy, a następnie wyrzucić ilość duplikatów (tak jak w kodzie, dla wartości "test1"). Spodziewam się wylistowania wszystkich elementów a następnie wartości 5 (mam pięć duplikatów), a dostaję:
test1
test2
5
Czemu mi nie listuje całego pliku?

1
  1. Co robi ta pętla i czym jest magiczne 100:
for(int i = 0; i < 100; i++) { 
        lista.add(czytacz.readLine()); 
}

Przez to masz liste długości 100 z kilkoma obiektami na początku i reszta nulli. Dlatego Ci rzuca NPE
2. Może spróbuj najpierw zapisać wszystkie linie w liście i upewnić się że poprawnie czytasz plik.
Teraz do listy leci tylko co drugi wiersz bo dwa razy wywołujesz

czytacz.readLine()

Sam zapis do listy można zrobić tak:

ArrayList<String> lista = new ArrayList<String>();
while ((wiersz = czytacz.readLine()) != null) {
        System.out.println(wiersz);
        lista.add(wiersz);
}

albo jeśli używasz Javy 8 to

File plik = new File("test.txt");
Stream<String> lines = Files.lines(plik.toPath());

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