Автор оригинала: Pankaj Kumar.
Существует множество различных способов чтения файла на Java. В этом уроке мы рассмотрим 5 различных способов чтения файла на Java.
Различные способы чтения файла на Java
5 классов из API ввода-вывода Java для чтения файлов:
- Буферизатор
- Поток ввода файлов
- Файлы
- Сканер
- Случайный файл
Чтение двоичных файлов и текстовых файлов
- Класс
FileInputStreamсчитывает данные файла в поток байтов. Поэтому его следует использовать для двоичных файлов, таких как изображения, pdf, мультимедиа, видео и т.д. - Текстовые файлы основаны на символах. Мы можем использовать классы
Reader, а также потоковые классы для их чтения. - Файлы и классы сканера можно использовать для чтения текстовых файлов, а не двоичных файлов.
Давайте рассмотрим примеры программ для чтения файла на Java.
1. BufferedReader Читает файл
Мы можем использовать BufferedReader для считывания содержимого текстового файла в массив символов .
BufferedReader эффективен для чтения файла, поскольку он буферизует входные данные из указанного файла. Без буферизации каждый вызов методов read() или readLine() будет считывать байты из файла, затем преобразовываться в символы и возвращаться, что будет очень неэффективно.
package com.journaldev.io.readfile;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileUsingBufferedReader {
public static void main(String[] args) {
BufferedReader reader;
char[] buffer = new char[10];
try {
reader = new BufferedReader(new FileReader(
"/Users/pankaj/Downloads/myfile.txt"));
while (reader.read(buffer) != -1) {
System.out.print(new String(buffer));
buffer = new char[10];
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
В приведенной выше программе я печатаю данные файла на консоль. Давайте рассмотрим другой класс утилит для выполнения операций чтения файлов.
- Прочитайте полный файл в виде строки
- Считывайте файл строка за строкой и возвращайте список строк
- Подсчитайте вхождение строки в данный файл.
package com.journaldev.java;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ReadFileJavaExample {
/**
* Main function to invoke different functions to
* 1. readCompleteFileAsString - Read complete file as String
* 2. readFileToListOfLines - Read lines from file and return list of line String
* 3. countStringInFile - Count occurrence of a String in the file
* @param args
*/
public static void main(String[] args) {
String filePath = "/Users/pankaj/Downloads/myfile.txt";
String str="Java";
String fileData = readCompleteFileAsString(filePath);
System.out.println("Complete File Data:"+fileData);
List linesData = readFileToListOfLines(filePath);
if(linesData!=null){
for(int i=0; i readFileToListOfLines(String filePath) {
List linesData = new ArrayList();
BufferedReader reader;
try {
reader = new BufferedReader(
new FileReader(filePath));
} catch (FileNotFoundException e) {
System.out.println("File is not present in the classpath or given location.");
return null;
}
String line;
try {
while ((line=reader.readLine()) != null) {
linesData.add(line);
}
} catch (IOException e) {
System.out.println("IOException in reading data from file.");
return null;
}
try {
reader.close();
} catch (IOException e) {
System.out.println("IOException in closing the Buffered Reader.");
return null;
}
return linesData;
}
/**
* This function will read complete file and return it as String
* @param filePath
* @return
*/
private static String readCompleteFileAsString(String filePath) {
StringBuilder fileData = new StringBuilder();
BufferedReader reader;
try {
reader = new BufferedReader(
new FileReader(filePath));
} catch (FileNotFoundException e) {
System.out.println("File is not present in the classpath or given location.");
return null;
}
char[] buf = new char[1024];
int numRead=0;
try {
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
} catch (IOException e) {
System.out.println("IOException in reading data from file.");
return null;
}
try {
reader.close();
} catch (IOException e) {
System.out.println("IOException in closing the Buffered Reader.");
return null;
}
return fileData.toString();
}
}
2. FileInputStream – Считывание двоичных файлов в байты
Мы всегда должны использовать поток для чтения файлов, не основанных на символах, таких как изображения, видео и т.д.
package com.journaldev.io.readfile;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadFileUsingFileInputStream {
public static void main(String[] args) {
FileInputStream fis;
byte[] buffer = new byte[10];
try {
fis = new FileInputStream("/Users/pankaj/Downloads/myfile.txt");
while (fis.read(buffer) != -1) {
System.out.print(new String(buffer));
buffer = new byte[10];
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Операция чтения FileInputStream используется с массивом байтов, в то время как операция чтения BufferedReader использует массив символов.
3. Файлы – Чтение файла в список строк
Файлы – это служебный класс, который был представлен в версии Java 1.7. Мы можем использовать его метод ReadAllLines() для чтения данных текстового файла в виде списка строк.
package com.journaldev.io.readfile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class ReadFileUsingFiles {
public static void main(String[] args) {
try {
List allLines = Files.readAllLines(Paths.get("/Users/pankaj/Downloads/myfile.txt"));
for (String line : allLines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. Сканер – Считывает текстовый файл в качестве итератора
Мы можем использовать класс сканера для чтения текстового файла. Он работает как итератор
package com.journaldev.io.readfile;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadFileUsingScanner {
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(new File("/Users/pankaj/Downloads/myfile.txt"));
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
5. RandomAccessFile – Чтение файлов в режиме только для чтения
Класс RandomAccessFile позволяет нам читать файл в разных режимах. Это хороший вариант, если вы хотите убедиться, что в файле не выполняется случайная операция записи.
package com.journaldev.io.readfile;
import java.io.IOException;
import java.io.RandomAccessFile;
public class ReadFileUsingRandomAccessFile {
public static void main(String[] args) {
try {
RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Это все для чтения файла на Java с использованием различных классов из Java IO API.
Рекомендации: