Как читать из файла java
Хотя с помощью ранее рассмотренных классов можно записывать текст в файлы, однако они предназначены прежде всего дл работы с бинарными потоками данных, и их возможностей для полноценной работы с текстовыми файлами недостаточно. И для этой цели служат совсем другие классы, которые являются наследниками абстрактных классов Reader и Writer .
Запись файлов. Класс FileWriter
Класс FileWriter является производным от класса Writer. Он используется для записи текстовых файлов.
Чтобы создать объект FileWriter, можно использовать один из следующих конструкторов:
FileWriter(File file) FileWriter(File file, boolean append) FileWriter(FileDescriptor fd) FileWriter(String fileName) FileWriter(String fileName, boolean append)
Так, в конструктор передается либо путь к файлу в виде строки, либо объект File, который ссылается на конкретный текстовый файл. Параметр append указывает, должны ли данные дозаписываться в конец файла (если параметр равен true), либо файл должен перезаписываться.
Запишем в файл какой-нибудь текст:
import java.io.*; public class Program < public static void main(String[] args) < try(FileWriter writer = new FileWriter("notes3.txt", false)) < // запись всей строки String text = "Hello Gold!"; writer.write(text); // запись по символам writer.append('\n'); writer.append('E'); writer.flush(); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В конструкторе использовался параметр append со значением false — то есть файл будет перезаписываться. Затем с помощью методов, определенных в базовом классе Writer производится запись данных.
Чтение файлов. Класс FileReader
Класс FileReader наследуется от абстрактного класса Reader и предоставляет функциональность для чтения текстовых файлов.
Для создания объекта FileReader мы можем использовать один из его конструкторов:
FileReader(String fileName) FileReader(File file) FileReader(FileDescriptor fd)
А используя методы, определенные в базом классе Reader, произвести чтение файла:
import java.io.*; public class Program < public static void main(String[] args) < try(FileReader reader = new FileReader("notes3.txt")) < // читаем посимвольно int c; while((c=reader.read())!=-1)< System.out.print((char)c); >> catch(IOException ex) < System.out.println(ex.getMessage()); >> >
Также мы можем считывать в промежуточный буфер из массива символов:
import java.io.*; import java.util.Arrays; public class Program < public static void main(String[] args) < try(FileReader reader = new FileReader("notes3.txt")) < char[] buf = new char[256]; int c; while((c = reader.read(buf))>0) < if(c < 256)< buf = Arrays.copyOf(buf, c); >System.out.print(buf); > > catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В данном случае считываем последовательно символы из файла в массив из 256 символов, пока не дойдем до конца файла в этом случае метод read возвратит число -1.
Поскольку считанная порция файла может быть меньше 256 символов (например, в файле всего 73 символа), и если количество считанных данных меньше размера буфера (256), то выполняем копирование массива с помощью метода Arrays.copy. То есть фактически обрезаем массив buf, оставляя в нем только те символы, которые считаны из файла.
Прочитайте текстовый файл с помощью FileReader в Java
В этом посте мы обсудим, как прочитать содержимое текстового файла с помощью FileReader в Java.
Мы можем использовать Reader такие как FileReader для чтения текстового файла в Java. FileReader это удобный класс, предназначенный для чтения потоков символов из файлов, которые работают только с кодировкой символов по умолчанию.
Чтобы прочитать содержимое текстового файла, идея состоит в том, чтобы создать новый FileReader и прочитать весь файл символ за символом, используя Reader’s read() метод, как показано ниже. Он возвращает прочитанный символ или -1, если достигнут конец потока, и выдает IOException при возникновении ошибки ввода/вывода.
Как прочитать текстовый файл в Java?
В Java все, кроме примитивных типов, есть объекты. Все эти объекты организованы в пакеты. Пакеты — это просто способ организации хранения Java-кода. Например, если у Вас есть следующая структура папок:
com
example
HelloWorld.java
, где com и example — это папка и подпапка, а HelloWorld.java — файл, то для доступа к этому файлу надо будет написать такой код:
Как видите, название пакета в Java отражает структуру папок, в которой лежат файлы.
Для чтения файлов любых типов, будь то бинарных или текстовых в Java IO API — интерфейсе ввода/вывода Java предусмотрено два вида интерфейсов — потоки (streams) и читатели (readers). Потоки (streams) используются для чтения данных произвольного типа, т.е. бинарных данных, а читатели (readers) — для чтения символьных данных. А так как текстовый файл представляет собой набор символьных данных, то для чтения текстовых файлов в Java нужно использовать реализации интерфейса Reader.
Читать текстовые файлы в Java можно несколькими способами: с помощью классов FileReader, BufferedReader или Scanner. Каждый из указанных классов обладает определенными функциональными особенностями: так например, BufferedReader обеспечивает буферизацию данных для более быстрого чтения, а Scanner — предоставляет возможности для лексического разбора текста.
Чтение текста используя FileReader
Класс FileReader является базовой реализацией интерфейса Reader. В качестве параметров конструктор данного класса принимает путь к файлу, который необходимо прочитать. Также данный класс предоставляет ряд переопределенных методов для чтения одного символа, символов в массив и т.д.
// файл ReadFile.java
// импортируем необходимые классы
// без них компилятор выдаст ошибку
import java.io.FileReader;
import java.io.IOException;
// класс ReadFile находится в файле ReadFile
class ReadFile
// статический метод для чтения файла
public static void readTxtFile(String fileName)
// блок try/catch необходим, так как в результате
// чтения файла могут возникнуть ошибки
try
// создаем экземпляр класса FileReader
FileReader tfr = new FileReader(fileName);
// создаем в памяти буфер для чтения 8Кб символов за раз
char[] buffer = new char[8096];
int chars = tfr.read(buffer);
// до тех пор пока есть символы в файле, читаем данные
// и выводим в консоль
while (chars != -1) System.out.println(String.valueOf(buffer, 0, chars));
chars = tfr.read(buffer);
>
// закрываем файл
tfr.close();
// отлавливаем исключение
> catch (IOException e) e.printStackTrace();
>
public static void main(String[] args) readTxtFile(«C:/Documents/MyFile.txt»);
>
// Вывод файла MyFile.txt
Раз, два, три
Код хорошо комментирован, но я поясню еще пару моментов. Из листинга кода видно, что вместо чтения одного символа за раз я читаю сразу много символов в массив char. Такой способ более эффективен по сравнению с использованием метода read(), который читает по одному символу за раз, и соответственно, каждый раз обращается к файлу. Метод read(char[]) же, наоборот, при одном обращении читает сразу столько символов сколько помещается в массив переданный ему аргументом. Такой метод обеспечивает более эффективное чтение файла, так вместо одного символа читается сразу много символов.
В данном примере я использую буфер объемом в 8KB (8096 байт). Чтение продолжается до тех пор пока метод read(char[]) не вернет -1, что свидетельствует о конце файла.
Таким образом, чтение текстовых файлов в Java не представляет особой трудности и показанный здесь пример — это только один из множества способов чтения файлов в Java.

![]()
Создано 25.06.2019 13:49:43
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Как прочитать файл txt на java
Есть однострочный txt файл. Как считать из файла одну строку и присвоить String переменной это значение?
Отслеживать
28.5k 12 12 золотых знаков 58 58 серебряных знаков 118 118 бронзовых знаков
задан 14 мар 2017 в 6:38
91 2 2 золотых знака 3 3 серебряных знака 11 11 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Java8
Если тебе надо иммено первую строчку прочитать :
String fileName = "file.txt"; Optional line = Files.lines(Paths.get(fileName)).findFirst(); System.out.println(line.get());
Если надо прочитать весь файл:
String fileName = "file.txt"; String content = Files.lines(Paths.get(fileName)).reduce("", String::concat); System.out.println(content);
Отслеживать
ответ дан 14 мар 2017 в 7:13
Vladlen Gladis Vladlen Gladis
1,586 10 10 серебряных знаков 15 15 бронзовых знаков
лучше бы .findFirst().orElse(null);
14 мар 2017 в 7:15
или line.ifPresent(System.out::print); Все равно прийдеться проверять на наличие строки как не крути
14 мар 2017 в 7:24
Тогда и так тоже не плохо Files.lines(Paths.get(fileName)).forEach(System.out::println); для всех строк
14 мар 2017 в 7:25
2 способ- если надо считать весь файл — тогда в content будет весь файл, заключенный в одну строчку? А что с переносами на новую строчку и tab-ами? Они будут в виде системных символов в строке или проигнорируются?
16 мар 2017 в 20:38
Да, будет одна строка. Если надо сохранить переносимость строк то можно написать так .reduce(«»,(a,b) -> a + «\n» + b);
17 мар 2017 в 6:40
Есть несколько способов, можете выбрать любой, в зависимости от версии java.
-
Явно создать BufferedReader :
try (BufferedReader reader = new BufferedReader(new FileReader(fileName)))
try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName)))
try (Stream stream = Files.lines(Paths.get(fileName))) < Optionaloptional = stream.findFirst(); String value = optional.isPresent() ? optional.get() : null; >