Jak číst soubory v Javě

Java poskytuje několik metod čtení souborů. Každá z těchto metod je vhodná pro čtení různých typů souborů v různých situacích. Některé jsou lepší pro čtení delších souborů, jiné jsou lepší pro čtení kratších souborů atd.

V tomto tutoriálu budeme ke čtení souborů používat následující třídy Java

  • Vyrovnávací paměť
  • Soubory
  • Skener

V celém výukovém programu používáme soubor uložený v src adresář, kde je cesta k souboru src/file.txt.


Než budete pokračovat, uložte do tohoto souboru několik řádků textu.

Poznámka:Při používání těchto implementací musíte správně zpracovat chyby, abyste se drželi nejlepších postupů kódování.

Čtení textových souborů v Javě pomocí BufferedReader

The BufferedReader třída čte proud vstupu znaků. Ukládá znaky do vyrovnávací paměti s výchozí velikostí 8 kB, aby byl proces čtení efektivnější. Pokud chcete číst soubor po řádku, je dobrou volbou použití BufferedReader.


BufferedReader je efektivní při čtení velkých souborů.

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 vrátí hodnotu null, když je dosaženo konce souboru.

Poznámka:Po dokončení čtení nezapomeňte soubor zavřít.

Čtení souboru kódovaného UTF-8 v Javě pomocí BufferedReader

Můžeme použít BufferedReader třídy pro čtení souboru kódovaného UTF-8.

Tentokrát předáme InputStreamReader objekt při vytváření BufferedReader instance.


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);
}
} }


Čtení souboru pomocí třídy souborů Java

Java Files třída, představená v prostředí Java 7 v prostředí Java NIO, sestává plně ze statických metod, které pracují se soubory.

Pomocí Files třídy, můžete načíst celý obsah souboru do pole. Díky tomu je dobrou volbou pro čtení menších souborů.

Podívejme se, jak můžeme v obou těchto scénářích použít třídu Files.

Čtení malých souborů v Javě pomocí třídy souborů

The readAllLines() metoda Files třída umožňuje čtení celého obsahu souboru a ukládá každý řádek v poli jako řetězce.


Můžete použít Path třídy k získání cesty k souboru od Files třída přijímá Path předmět souboru.

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);
} }

Můžete použít readAllBytes() načíst data uložená v souboru do bajtového pole namísto řetězcového pole.

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

Čtení velkých souborů v Javě pomocí třídy souborů

Pokud si chcete přečíst velký soubor pomocí Files třídy, můžete použít newBufferedReader() metoda pro získání instance BufferedReader třídy a přečtěte soubor po řádku pomocí 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();
} }


Čtení souborů pomocí Files.lines ()

Java 8 představila novou metodu třídy Files pro načtení celého souboru do Stream řetězců.


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();
} }


Čtení textových souborů v Javě pomocí skeneru

The Scanner třída rozdělí obsah souboru na části pomocí daného oddělovače a přečte jej po částech. Tento přístup je nejvhodnější pro čtení obsahu odděleného oddělovačem.

Například Scanner třída je ideální pro čtení seznamu celých čísel oddělených mezerami nebo seznamu řetězců oddělených čárkami.

Výchozí oddělovač Scanner třída je prázdné místo. Oddělovač však můžete nastavit na jiný znak nebo regulární výraz. Má také různé další metody, například next(), nextInt(), nextLine() a nextByte() pro převod obsahu do různých typů.

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();
} }

Ve výše uvedeném příkladu nastavíme oddělovač na mezery a použijeme next() metoda pro čtení další části obsahu oddělené mezerami.


Čtení celého souboru

Můžete použít Scanner třídy pro čtení celého souboru najednou bez spuštění smyčky. Musíte předat “\Z” jako oddělovač.

scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close(); Poznámka:Třída skeneru není synchronizována, a proto není bezpečná pro vlákna.

Závěr

Jak jste viděli v tomto výukovém programu, Java nabízí mnoho metod, ze kterých si můžete vybírat podle povahy úkolu, který máte po ruce, pro čtení textových souborů. Můžete použít BufferedReader číst velké soubory řádek po řádku.

Pokud chcete číst soubor, jehož obsah je oddělen oddělovačem, použijte Scanner třída.

Můžete také použít Java NIO Files třídy pro čtení malých i velkých souborů.