Автор оригинала: 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); ListlinesData = 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 { ListallLines = 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.
Рекомендации: