Читаем данные из файла с помощью Java

User Rating: 0 / 5

Давайте рассмотрим один из простых вариантов чтения данных из файла при помощи Java.

Для простого примера нам потребуется создать какой-то тестовый файл в директории на компьютере, из которого и будем читать содержимое. В моём случае я создал файл в директории C:\Users\user\Documents\mydata.txt и поместил туда следующее содержимое:

Это простой пример
содержимого файла,
которое мы считаем с помощью
программы на Java

Дальше создадим простой Java-класс в пакете с нашим проектом. У меня пакет, где я создам класс с именем ReadingFileExample, называется ru.allineed.samples.corejava.io. Если у Вас другое название пакета, для выполнения примера из статьи лишь потребуется заменить его в первой строке нашей простой программы.

Итак, в листинге ниже один из вариантов, как можно прочитать данные из нашего тестового файла:

package ru.allineed.samples.corejava.io;

import java.io.*;

public class ReadingFileExample {
    public static void main(String[] args) {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\user\\Documents\\mydata.txt"));
            while (bufferedReader.ready()) {
                String line = bufferedReader.readLine();
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

Наша небольшая программа создаст экземпляр класса BufferedReader, с помощью которого удобно читать содержимое файла, расположенного по заданному пути, который мы передаём также в новый объект FileReader и передаем этот объект, в свою очередь, в конструктор класса BufferedReader.

Далее, всё что требуется - организовать цикл до тех пор, пока метод ready() возвращает значение true. Согласно документации Java, метод read() говорит о том, что стрим, для которого он применяется, готов к прочтению. Буферизированный символьный стрим считается готовым, если буфер непустой, или если нижележащий символьный поток готов. Он возвращает true, если следующий вызов метода read() гарантированно не заблокирует ввод, в противном случае метод вернёт false. Также в документации просят обратить внимание на то, что возврат значения false методом ещё не гарантирует, что последующее чтение будет блокировать ввод.

В цикле while мы вызываем метод readLine(), который считывает из файла очередную строку с данными и далее сразу же выводим её в стандартный поток вывода (т.е. на консоль). Строкой считается последовательность символов, которая оканчивается либо символом перевода строки (\n), либо символом возврата каретки (\r), либо символом возврата каретки, за которым сразу же следует символ перевода строки (т.е. последовательность \r\n).

Как нетрудно догадаться, на экран наша программа выведет содержимое нашего файла:

Это простой пример
содержимого файла,
которое мы считаем с помощью
программы на Java

Второй вариант чтения данных из нашего файла (также с помощью класса BufferedReader) заключается в вызове метода lines(), который вернёт строковый стрим (Stream<String>), к которому можно применить оператор forEach и вывести с его помощью все строки на экран консоли:

package ru.allineed.samples.corejava.io;

import java.io.*;

public class ReadingFileExample {
    public static void main(String[] args) {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\компьютер\\Documents\\mydata.txt"));
            bufferedReader.lines().forEach(System.out::println);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

Этот вариант для выполнения задачи "считать строки из файла и вывести их на экран" лично мне кажется более компактным и изящным, чем предыдущий, где требовался цикл while.

Какой из них использовать - на Ваше усмотрение. Напишите в комментариях к статье, что думаете - какой вариант нравится больше.

 

Яндекс.Метрика