Jason. Cała informatyka w jednym miejscu!

Głodny(-a) wiedzy na temat Javy ☕? Przed Tobą następny artykuł powstały z konieczności podzielenia już powstałego materiału na mniejsze części 🧩. Temat będzie rozpoczęty temat odczytu z pliku tekstowego w języku Java, a klasa "BufferedReader" jeszcze bardziej uprzyjemni ten proces! Wchodź do środka po więcej informacji 😄!

"BUFFEREDREADER" W JĘZYKU JAVA JAKO KOLEJNY KROK W STRONĘ ODCZYTU

Nazwa na dzień dobry sugeruje, że mamy do czynienia z wejściem buforowanym. Istotnie, wykorzystuje bufor do składowania odczytywanych danych. W praktyce, pozwala to na odczytywanie nie znak po znaku, tylko już całego wiersza 😇! To jest duży plus tej klasy. Ponadto, tak samo jak przy "BufferedWriter", bufor efektywnie redukuje liczbę operacji - zamiast znak po znaku, dopiero wtedy gdy bufor wyczerpie swoją pojemność ♻️.

Konstruktor klasy "BufferedReader" wymaga podania w parametrze instancji typu "Reader", czyli dla przykładu "FileReader" (bo klasa "FileReader" JEST klasą "Reader" wg relacji "JEST"):

BufferedReader bufferedReader = new BufferedReader(new FileReader("file.txt"));

i naturalnie obejmujemy to obsługą wyjątków, bo operacje na plikach są ryzykowne (może nie zostać odnaleziony, brak uprawnień do odczytu itd.):

try {
	BufferedReader bufferedReader = new BufferedReader(new FileReader("test.txt"));

	bufferedReader.close();
} catch (Exception exception) {
	exception.printStackTrace();
	}

Uczulam ponownie na metodę "close" - kiedy zdefiniujesz sobie jakiś strumień, od razu dodawaj to wywołanie, bo potem łatwo zapomnieć 🙄...

"BUFFEREDREADER" VERSUS "FILEREADER"

"BufferedReader" w języku Java wspiera odczytywanie całego pojedynczego wiersza, także metoda "readLine" to wszystko co najistotniejsze, co musisz wiedzieć po tym artykule 👍. Rozpatrzmy dwie wersje aplikacji odczytujących zawartość z podanego pliku przy użyciu pętli "while":

"FILEREADER"
try {
	File file = new File("test.txt");
	FileReader fileReader = new FileReader(file);
	int character;
	
	while ((character = fileReader.read()) != -1) {
		System.out.print\(character);
	}
	
	fileReader.close();
} catch (Exception exception) {
	exception.printStackTrace();
}

Na tym przykładzie widzimy dwa charakterystyczne elementy. Po pierwsze, możemy odczytywać jedynie pojedyncze znaki (metoda "read"), a po drugie, celem otrzymania znaku na danej pozycji, musimy rzutować typ "int" na typ "char".

"BUFFEREDREADER"
try {
	BufferedReader bufferedReader = new BufferedReader(new FileReader("test.txt"));
	String line;
	
	while ((line = bufferedReader.readLine()) != null) {
		System.out.println(line);
	}
	
	bufferedReader.close();
} catch (Exception exception) {
	exception.printStackTrace();
}

Tu widać gołym okiem jak podnosi się wygoda 😊. Metoda "readLine" pobiera jeden wiersz i przypisuje go jako typ "String" (zwraca "null", jeżeli doszedł do końca tzw. EOF, "end of line"). Żadne rzutowanie już nie jest potrzebne - drugi punkt dla "BufferedReader" w języku Java ✅.

Jeżeli czytałeś(-aś) artykuł o łańcuchowym typie danych i o klasie "StringBuilder", to już wiesz, że powyższy przykład może być narażony na marnowanie pamięci z powodu każdorazowego przypisywania nowego łańcucha tej samej zmiennej. Żeby temu zapobiec, można zapisać tak:

while (true) {
	String line = bufferedReader.readLine();

	if(line == null) {
		break;
	}

	System.out.println(line);
}

Choć zapis samej pętli dużo bardziej zagmatwany 😁.

Klasa "BufferedReader" w języku Java

"BufferedReader" w języku Java podnosi wygodę i abstrakcję operacji odczytu z podanego pliku wykorzystując do tego bufor, który daje zdolność do pobierania całego wiersza z danymi bez konieczności jakiegokolwiek rzutowania.


Koniec. Co więcej można napisać? Korzystaj z "BufferedReader" - zrobi to samo prościej i efektywniej 😁!

PODOBNE ARTYKUŁY