Како да читате датотеки во Јава

Java обезбедува неколку методи за читање датотеки. Секој од овие методи е соодветен за читање на различни видови датотеки во различни ситуации. Некои се подобри за читање подолги датотеки, други се подобри за читање пократки, итн.

Во ова упатство, ќе ги користиме следниве Java класи за читање датотеки

  • BufferedReader
  • Датотеки
  • Скенер

Во текот на упатството, ние користиме датотека зачувана во src директориум каде е патеката до датотеката src/file.txt.


Зачувајте неколку редови текст во оваа датотека пред да продолжите.

Забелешка:Треба правилно да се справите со грешките кога ги користите овие имплементации за да се држите до најдобрите практики за кодирање.

Читање датотеки со текст во Јава со BufferedReader

BufferedReader часот чита поток за внесување карактер. Баферира карактери во тампон со зададена големина од 8 KB за да го направи процесот на читање поефикасен. Ако сакате да прочитате датотека линија по линија, користењето на BufferedReader е добар избор.


BufferedReader е ефикасен во читање големи датотеки.

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

readline() методот се враќа нула кога ќе се достигне крајот на датотеката.

Забелешка:Не заборавајте да ја затворите датотеката кога ќе заврши читањето.

Читање на шифрирана датотека UTF-8 во Јава со BufferedReader

Можеме да ги користиме BufferedReader класа за читање на кодирана датотека UTF-8.

Овој пат, ние поминуваме InputStreamReader објект при креирање на BufferedReader инстанца.


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


Користење на класа датотеки Java за читање датотека

Јава Files класата, воведена во Java 7 во Java NIO, се состои целосно од статички методи кои работат на датотеки.

Користење на Files класа, можете да ја прочитате целата содржина на датотеката во низа. Ова го прави добар избор за читање помали датотеки.

Да видиме како можеме да ја користиме класата Датотеки и во овие сценарија.

Читање мали датотеки во Јава со класа датотеки

readAllLines() метод на Files класата овозможува читање на целата содржина на датотеката и ја зачувува секоја линија во низа како низи.


Можете да ги користите Path класа за да се добие патеката до датотеката од Files класата ги прифаќа Path предмет на датотеката.

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

Можете да ги користите readAllBytes() за враќање на податоците зачувани во датотеката во бајт низа наместо низа со низи.

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

Читање големи датотеки во Јава со класа датотеки

Ако сакате да прочитате голема датотека со Files класа, можете да ја користите newBufferedReader() метод за да се добие инстанца на BufferedReader класа и прочитајте ја датотеката линија по линија користејќи 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();
} }


Читање датотеки со Files.lines ()

Java 8 воведе нов метод во класата Files за да ја прочита целата датотека во Stream на жиците.


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


Читање на датотеки со текст во Јава со Скенер

Scanner класата ја раздвојува содржината на датотеката во делови користејќи даден разграничувач и ја чита дел по дел. Овој пристап најдобро одговара за читање содржина што е одделена со разграничувач.

На пример, Scanner класата е идеална за читање на список на цели броеви одделени со бели празни места или список на жици одделени со запирки.

Стандарден разграничувач на Scanner часот е бел простор. Но, можете да го поставите разграничувачот на друг знак или на редовен израз. Исто така, има различни следни методи, како | |

next()

Во горенаведениот пример, го поставивме разделувачот на празно место и го користиме nextInt() метод за читање на следниот дел од содржината одделена со бел простор.


Читање на цела датотека

Можете да ги користите nextLine() класа за да ја прочитате целата датотека одеднаш без да извршите јамка. Треба да поминете nextByte() како разграничувач за ова.

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();
} }
Забелешка:Класата Скенер не е синхронизирана и затоа не е безбедна за конец.

Заклучок

Како што видовте во ова упатство, Java нуди многу методи од кои можете да изберете во согласност со природата на задачата што ја имате за да ги прочитате датотеките со текст. Можете да ги користите next() да чита големи датотеки линија по линија.

Ако сакате да прочитате датотека која има содржина одделена со разграничувач, користете Scanner класа

Исто така, можете да користите Java NIO “\Z” класа за читање и на мали и на големи датотеки.