Java обезбедува неколку методи за читање датотеки. Секој од овие методи е соодветен за читање на различни видови датотеки во различни ситуации. Некои се подобри за читање подолги датотеки, други се подобри за читање пократки, итн.
Во ова упатство, ќе ги користиме следниве Java класи за читање датотеки
Во текот на упатството, ние користиме датотека зачувана во src
директориум каде е патеката до датотеката src/file.txt
.
Зачувајте неколку редови текст во оваа датотека пред да продолжите.
Забелешка:Треба правилно да се справите со грешките кога ги користите овие имплементации за да се држите до најдобрите практики за кодирање.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()
методот се враќа нула кога ќе се достигне крајот на датотеката.
Можеме да ги користиме 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);
}
} }
Јава 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();
} }
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”
класа за читање и на мали и на големи датотеки.