Читање датотеке ред по ред у Java-и

Читање датотеке ред по ред у Java-и

Читање датотеке ред по ред је честа операција у Јава програмирању. Овај процес је користан за анализу података, обраду текста и многе друге задатке. Јава пружа различите начине да се оствари овај задатак, а у овом чланку ћемо истражити неке од најчешћих и ефикасних метода.

Увод

Пре него што се упустимо у детаљну анализу, важно је да разумемо основни концепт читања датотеке у Јава-и.

* Путања до датотеке: Прво, требамо да имамо валидну путању до датотеке коју желимо да прочитамо. Путања може бити апсолутна (нпр. „C:\Users\Public\Documents\MyFile.txt“) или релативна (нпр. „data/MyFile.txt“).
* Стримови: Јава користи стримове за рад са датотекама. Стримови представљају апстрактни концепт који омогућава читање или писање података у различите изворе, укључујући и датотеке.
* Класе за читање: Јава нам пружа различите класе које се користе за читање датотека. Неке од најчешћих су:
* BufferedReader: Ова класа је веома ефикасна за читање датотека ред по ред.
* FileReader: Ова класа се користи за читање текста из датотеке.
* Scanner: Ова класа омогућава читање из датотека на различите начине, укључујући и ред по ред.

Методе за Читање датотеке ред по ред

Постоје различите методе за читање датотеке ред по ред у Јава-и које ћемо детаљно анализирати у наредним поглављима.

1. Коришћење BufferedReader

Ова метода је једна од најчешћих и ефикасних. Користимо класу BufferedReader да бисмо читали датотеку ред по ред.

java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadFileLineByLine {

public static void main(String[] args) {
String filePath = "data/MyFile.txt"; // Путања до датотеке

try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("Грешка приликом читања датотеке: " + e.getMessage());
}
}
}

У овом примеру, BufferedReader се користи за читање линија из датотеке. readLine() метод враћа следећи ред из датотеке, а петља while се извршава све док се не наиђе на крај датотеке (када readLine() врати null).

2. Коришћење Scanner

Класа Scanner омогућава флексибилно читање из датотека. Можемо да искористимо nextLine() метод да бисмо читали датотеку ред по ред.

java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadFileWithScanner {

public static void main(String[] args) {
String filePath = "data/MyFile.txt"; // Путања до датотеке

try (Scanner scanner = new Scanner(new File(filePath))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.err.println("Датотека није пронађена: " + e.getMessage());
}
}
}

У овом примеру, Scanner се користи за читање датотеке. hasNextLine() метод проверава да ли постоји следећи ред у датотеци, а nextLine() враћа следећи ред.

3. Коришћење Files.lines()

Јава 8 и новије верзије уводе Files.lines() метод који је веома елегантан за читање датотеке ред по ред.

java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class ReadFileWithFilesLines {

public static void main(String[] args) throws IOException {
String filePath = "data/MyFile.txt"; // Путања до датотеке

Files.lines(Paths.get(filePath))
.forEach(System.out::println);
}
}

У овом примеру, Files.lines() враћа Stream линија из датотеке, а forEach() се користи за итерацију кроз линије и њихово исписивање на конзолу.

Обрада података из датотеке

Када прочитамо датотеку ред по ред, често је потребно обрадити податке. Ово може да укључује:

* Парсинг података: Претварање текста у нумеричке вредности, датуме, или друге типове.
* Филтрирање: Издвајање само одређених редова који задовољавају неке услове.
* Груписање: Свођење сличних редова у групе.
* Обрада: Извршавање специфичних операција над подацима.

Пример: Обрада датотеке са подацима о ученицима

Замислимо да имамо датотеку са подацима о ученицима, где сваки ред садржи име, презиме и оцену.


Име Prezime Ocena
Петар Петровић 8
Марија Јовановић 9
Јован Милић 7

Можемо да прочитамо ову датотеку ред по ред и обрадимо податке на следећи начин:

java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class StudentDataProcessor {

public static void main(String[] args) {
String filePath = "data/students.txt"; // Путања до датотеке

try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
reader.readLine(); // Прочитај први ред (заглавље)
while ((line = reader.readLine()) != null) {
String[] parts = line.split("\\s+"); // Раздели ред по размацима
String ime = parts[0];
String prezime = parts[1];
int ocena = Integer.parseInt(parts[2]);

// Обрада података
System.out.println("Ученик: " + ime + " " + prezime + ", Оцена: " + ocena);
}
} catch (IOException e) {
System.err.println("Грешка приликом читања датотеке: " + e.getMessage());
}
}
}

У овом примеру, split() метод се користи да бисмо раздвојили делове реда по размацима. Затим, Integer.parseInt() се користи за претварање текста у целобројну вредност.

Закључак

Читање датотеке ред по ред је основна вештина у Јава програмирању. Овладавање овом вештином омогућава ефикасно коришћење података из датотека. Јава нам пружа различите методе за читање датотека, а избор најбоље методе зависи од спецификација задатка.

Важно је напоменути да постоје и друге методе за читање датотека, као што су FileInputStream и FileChannel. Међутим, методе које смо описали су веома ефикасне и једноставне за коришћење у већини случајева.

Често постављана питања (FAQ)

1. Како пронаћи путању до датотеке? – Путања до датотеке може бити апсолутна (која садржи целу путању од корена система датотека) или релативна (која се односи на датотеку у односу на тренутну директорију).
2. Шта се дешава ако датотека не постоји? – У том случају, код ће бацити FileNotFoundException. Треба да овим изузетком да би се извршио обрада грешке.
3. Како да прочитам датотеку у кодирању UTF-8? – Можемо да користимо InputStreamReader са одговарајућим кодирањем: new InputStreamReader(new FileInputStream(filePath), StandardCharsets.UTF_8).
4. Како да обрадим евентуалне грешке приликом читања датотеке? – Треба да користимо try-catch блок да бисмо обрадили IOException или друге изузетке који се могу јавити.
5. Како да прочитам датотеку велике величине? – За веома велике датотеке, може бити ефикасније да се користи RandomAccessFile или MappedByteBuffer да бисмо избјегли читање целе датотеке у меморију.
6. Како да затворим BufferedReader?BufferedReader треба да се затвори помоћу close() методе након употребе да би се ослободили ресурси.
7. Шта је try-with-resources?try-with-resources је Јава механизам који аутоматски затвара ресурсе, као што су стримови, по завршетку try блока.
8. Како да прочитам датотеку реда по реда и истовремено обрадим податке? – Можемо да користимо вишеструке нити или Stream API да бисмо паралелно читали и обрађивали податке из датотеке.
9. Шта је File класа?File класа представља датотеку или директоријум у файловом систему.
10. Како да прочитам датотеку која се налази на удаљеном серверу? – За читање датотеке са удаљеног сервера можемо да користимо протокле (URLConnection или HttpClient).

Овај чланак је само увод у свет читања датотека у Јава-и. Постоји много других начина и техника које се могу истражити. Надамо се да вам је овај чланак помогао у разумевању основних принципа и да сте спремни да почнете са својим Јава пројектима!

Тагови: Java, датотеке, читање, ред, ред по ред, BufferedReader, FileReader, Scanner, Files.lines(), обрада података, парсинг, филтрирање, груписање, програмски језик, програмски код, програм, софтвер, апликација, развој софтвера, програмирање