Strumienie tekstowe (BufferedReader)

Strumienie tekstowe (BufferedReader)
hdw3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

Witam!
Napisałem metodę do liczenia ilości literek w pliku .txt:

Kopiuj
    public static void licz(File f)throws IOException{
        ArrayList<Abs> al = new ArrayList<>();
        char znak = 'a';
        while(znak<='z'){
            int count=0;
            String linia;
            BufferedReader br = new BufferedReader(new FileReader(f));
            while((linia=br.readLine())!=null){
                for(int i=0; i<linia.length(); i++){
                    if(linia.charAt(i)==znak)count++;
                }
            }
            Abs obj = new Abs(znak,count);
            al.add(obj);
            znak++;
        }

Wszystko działa, ale zastanawiam się czy można w jakiś łatwy sposób przywracać pointer strumienia na początek pliku, bo ja zamiast robić coś takiego to po prostu z każdą iteracją pętli odpowiedzialną za zmianę znaku od nowa tworze strumien BufferedReader

Kopiuj
 BufferedReader br = new BufferedReader(new FileReader(f));
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Operacje I/O na plikach są najdłuższe, więc to co robisz jest totalnie nieoptymalne. Powinieneś iśc po pliku i się nie cofować, możesz użyc HashMapy albo zwykłej tablicy...


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
hdw3
Rozumiem. Nie pomyślałem wgl o takim rozwiązaniu, jakoś od razu mi do głowy wpadło to wyżej. Jak wrócę do domu to spróbuję to zamienić zgodnie z tym, co powiedziałeś, dzięki ;)
S9
W ogóle stworzyłeś klasę Abs, zamiast użyć mapy Map<Character,Integer> co mnie troche dziwi
hdw3
Dopiero teraz bliżej poznaje mapy dlatego jej nie uzylem i nie wiedzialem, ze operacje IO sa nieoptymalne, dlatego nawet nie szukalem lepszych rozwiazan jak to pisalem. Dodatkowo jest to program, ktory pisalem jedynie jak dodatek do programu tworzacego drzewa Huffmana dlatego glownym zalozeniem tej metody bylo po prostu poprawne dzialanie, a z ta klasa Abs to jedynie testowalem poprawnosc metody.
S9
Kolekcje to jedna z podstawowych rzeczy w Javie (i generalnie jakimkolwiek języku obiektowym) więc warto ogarnąć ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.