Kako čitati datoteke na Javi

Java nudi nekoliko metoda za čitanje datoteka. Svaka od ovih metoda prikladna je za čitanje različitih vrsta datoteka u različitim situacijama. Neki su bolji za čitanje duljih datoteka, drugi su bolji za čitanje kraćih datoteka itd.

U ovom uputstvu koristit ćemo sljedeće Java klase za čitanje datoteka

  • BufferedReader
  • Datoteke
  • Skener

Tijekom cijelog vodiča koristimo datoteku pohranjenu u src direktorij gdje je put do datoteke src/file.txt.

Prije nastavka spremite nekoliko redaka teksta u ovu datoteku.

Bilješka:Morate pravilno riješiti pogreške kada se koristite ovim implementacijama kako biste se pridržavali najboljih praksi kodiranja.

Čitanje tekstualnih datoteka na Javi pomoću BufferedReader-a

The BufferedReader klasa čita tok unosa znakova. Znakove sprema u međuspremnik zadane veličine 8 KB kako bi postupak čitanja bio učinkovitiji. Ako želite čitati datoteku redak po redak, dobar je odabir upotreba BufferedReader-a.

BufferedReader učinkovit je u čitanju velikih datoteka.



import java.io.*; public class FileReaderWithBufferedReader {
public static void main(String[] args) throws IOException{We
String file = 'src/file.txt';
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as required

System.out.println(curLine);
}
bufferedReader.close();
} }

The readline() metoda vraća nulu kada se dosegne kraj datoteke.

Bilješka:Ne zaboravite zatvoriti datoteku kad je čitanje završeno.

Čitanje UTF-8 kodirane datoteke na Javi pomoću BufferedReader-a

Možemo koristiti BufferedReader klase za čitanje datoteke kodirane UTF-8.

Ovaj put prolazimo InputStreamReader objekt pri stvaranju BufferedReader primjer.

import java.io.*; public class EncodedFileReaderWithBufferedReader {
public static void main(String[] args) throws IOException {
String file = 'src/fileUtf8.txt';
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), 'UTF-8'));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as you require

System.out.println(curLine);
}
} }

Korištenje klase Java Files za čitanje datoteke

Java Files klasa, predstavljena u Javi 7 u Java NIO, sastoji se u potpunosti od statičkih metoda koje djeluju na datoteke.

Korištenje Files klase, čitav sadržaj datoteke možete pročitati u niz. To ga čini dobrim izborom za čitanje manjih datoteka.

Pogledajmo kako klasu Datoteke možemo koristiti u oba ova scenarija.

Čitanje malih datoteka na Javi s razredom datoteka

The readAllLines() metoda Files klasa omogućuje čitanje cjelokupnog sadržaja datoteke i pohranjuje svaki redak u niz kao nizove.

Možete koristiti Path klase da bi se dobio put do datoteke od Files klasa prihvaća Path objekt datoteke.

import java.io.IOException; import java.nio.file.*; import java.util.*; public class SmallFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
List lines = Files.readAllLines(path);
} }

Možete koristiti readAllBytes() za dohvaćanje podataka pohranjenih u datoteci u bajtni niz umjesto u niz nizova.

byte[] bytes = Files.readAllBytes(path);

Čitanje velikih datoteka na Javi s razredom datoteka

Ako želite pročitati veliku datoteku s Files klase, možete koristiti newBufferedReader() metoda za dobivanje instance BufferedReader klase i pročitajte datoteku redak po redak pomoću BufferedReader.

import java.io.*; import java.nio.file.*; public class LargeFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
BufferedReader bufferedReader = Files.newBufferedReader(path);

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

System.out.println(curLine);
}
bufferedReader.close();
} }

Čitanje datoteka pomoću Files.lines ()

Java 8 uvela je novu metodu u klasu Datoteke za čitanje cijele datoteke u Stream žica.

import java.io.IOException; import java.nio.file.*; import java.util.stream.Stream; public class FileReaderWithFilesLines {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
Stream lines = Files.lines(path);

lines.forEach(s -> System.out.println(s));
lines.close();
} }

Čitanje tekstualnih datoteka na Javi pomoću skenera

The Scanner class razlaže sadržaj datoteke na dijelove pomoću zadanog graničnika i čita je dio po dio. Ovaj je pristup najprikladniji za čitanje sadržaja koji je odvojen graničnikom.

Na primjer, Scanner class je idealan za čitanje popisa cijelih brojeva odvojenih razmacima ili popisa nizova odvojenih zarezima.

Zadani graničnik Scanner razred je razmak. Ali graničnik možete postaviti na drugi znak ili regularni izraz. Također ima razne sljedeće metode, kao što su next(), nextInt(), nextLine() i nextByte(), za pretvaranje sadržaja u različite vrste.

import java.io.IOException; import java.util.Scanner; import java.io.File; public class FileReaderWithScanner {
public static void main(String[] args) throws IOException{
String file = 'src/file.txt';
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(' ');

while(scanner.hasNext()){

String next = scanner.next();

System.out.println(next);
}
scanner.close();
} }

U gornjem primjeru postavljamo graničnik na razmak i koristimo next() metoda za čitanje sljedećeg dijela sadržaja odvojenog razmakom.

Čitanje cijele datoteke

Možete koristiti Scanner klase za čitanje cijele datoteke odjednom bez pokretanja petlje. Morate položiti “\Z” kao graničnik za ovo.

scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close(); Bilješka:Klasa skenera nije sinkronizirana i stoga nije sigurna u nitima.

Zaključak

Kao što ste vidjeli u ovom vodiču, Java nudi mnoge metode koje možete odabrati prema prirodi zadatka koji vam je pri ruci za čitanje tekstualnih datoteka. Možete koristiti BufferedReader za čitanje velikih datoteka redak po redak.

Ako želite pročitati datoteku čiji je sadržaj odvojen graničnikom, upotrijebite Scanner razred.

Također možete koristiti Java NIO Files razred za čitanje i malih i velikih datoteka.