Як чытаць файлы на Java

Java прадастаўляе некалькі метадаў для чытання файлаў. Кожны з гэтых метадаў падыходзіць для чытання файлаў розных тыпаў у розных сітуацыях. Некаторыя лепш чытаюць больш доўгія файлы, іншыя лепш чытаюць больш кароткія і г.д.

У гэтым уроку мы будзем выкарыстоўваць наступныя класы Java для чытання файлаў

  • BufferedReader
  • Файлы
  • Сканер

На працягу ўроку мы выкарыстоўваем файл, які захоўваецца ў src каталог, дзе шлях да файла src/file.txt.


Захоўвайце ў гэтым файле некалькі радкоў тэксту, перш чым працягваць.

нататка:Вы павінны правільна апрацоўваць памылкі пры выкарыстанні гэтых рэалізацый, каб прытрымлівацца лепшых практык кадавання.

Чытанне тэкставых файлаў на Java з дапамогай BufferedReader

BufferedReader клас чытае паток уводу сімвалаў. Ён буферызуе сімвалы ў буферы з памерам па змаўчанні 8 КБ, каб зрабіць працэс чытання больш эфектыўным. Калі вы хочаце прачытаць файл радок за радком, выкарыстанне 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() метад вяртае null пры дасягненні канца файла.

нататка:Не забудзьцеся закрыць файл па заканчэнні чытання.

Чытанне зашыфраванага файла UTF-8 у Java з дапамогай 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 Files клас, уведзены ў Java 7 у Java NIO, цалкам складаецца са статычных метадаў, якія працуюць з файламі.

Выкарыстанне Files клас, вы можаце прачытаць поўны змест файла ў масіў. Гэта робіць яго добрым выбарам для чытання меншых файлаў.

Давайце паглядзім, як мы можам выкарыстоўваць клас Files ў абодвух гэтых сцэнарыях.

Чытанне невялікіх файлаў на Java з дапамогай класа файлаў

readAllLines() метад Files class дазваляе чытаць увесь змест файла і захоўвае кожны радок у масіве ў выглядзе радкоў.


Вы можаце выкарыстоўваць 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);

Чытанне вялікіх файлаў на Java з дапамогай класа файлаў

Калі вы хочаце прачытаць вялікі файл з 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();
} }


Чытанне тэкставых файлаў на Java са сканарам

Scanner class разбівае змест файла на часткі з выкарыстаннем дадзенага раздзяляльніка і счытвае яго па частках. Такі падыход лепш за ўсё падыходзіць для чытання змесціва, якое аддзяляецца падзельнікам.

Напрыклад, Scanner class ідэальна падыходзіць для чытання спісу цэлых лікаў, падзеленых прабеламі, альбо радкоў, падзеленых коскамі.

Раздзяляльнік па змаўчанні 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();
} }

У прыведзеным вышэй прыкладзе мы ўсталёўваем раздзяляльнік прабелам і выкарыстоўваем next() метад для чытання наступнай часткі зместу, падзеленай прабеламі.


Чытанне цэлага файла

Вы можаце выкарыстоўваць Scanner клас, каб прачытаць увесь файл адначасова, не запускаючы цыкл. Вы павінны здаць “\Z” у якасці раздзяляльніка для гэтага.

scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close(); нататка:Клас Scanner не сінхранізаваны і, такім чынам, не бяспечны для патокаў.

Выснова

Як вы пераканаліся ў гэтым уроку, Java прапануе мноства метадаў, якія вы можаце выбраць у залежнасці ад характару вашай рукі для чытання тэкставых файлаў. Вы можаце выкарыстоўваць BufferedReader для чытання вялікіх файлаў радок за радком.

Калі вы хочаце прачытаць файл, змест якога падзелены падзельнікам, выкарыстоўвайце Scanner клас.

Таксама вы можаце выкарыстоўваць Java NIO Files клас для чытання як малых, так і вялікіх файлаў.