Перейти к содержимому

Как считать строки из файла java

  • автор:

Как считать строки из файла java

Чтение строк из файла в Java можно выполнить с помощью класса BufferedReader , который позволяет читать текстовые данные из потока ввода. Для чтения строк из файла сначала необходимо открыть файл для чтения, а затем читать строки по одной до тех пор, пока не достигнут конец файла.

Ниже приведен пример кода, который демонстрирует, как считывать строки из файла в Java с помощью BufferedReader :

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main  public static void main(String[] args)  try  BufferedReader reader = new BufferedReader(new FileReader("file.txt")); String line = reader.readLine(); while (line != null)  System.out.println(line); line = reader.readLine(); > reader.close(); > catch (IOException e)  e.printStackTrace(); > > > 
  • В этом примере мы создаем объект BufferedReader с помощью конструктора new BufferedReader(new FileReader(«file.txt»)) , где file.txt — это имя файла, который мы хотим прочитать.
  • Затем мы читаем строки из файла, вызывая метод readLine() объекта BufferedReader . Метод readLine() возвращает очередную строку текста из файла или null , если достигнут конец файла.

Кроме того, обратите внимание, что мы заключили вызов BufferedReader.close() в блок finally , чтобы гарантировать, что поток чтения будет закрыт даже в случае исключения.

Как считать строки из файла 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, оставляя в нем только те символы, которые считаны из файла.

Построчное чтение файла в Java

В данном мануале мы разберем разные способы построчного считывания содержимого файла с помощью Java. Это можно сделать с помощью следующих классов Java: java.io.BufferedReader, java.util.Scanner, Files.readAllLines() и java.io.RandomAccessFile.

Чтение файла с помощью BufferedReader

Читать файл построчно можно с помощью метода readLine() из java.io.BufferedReader. Этот метод возвращает null при достижении конца файла.

Пример считывания с помощью BufferedReader:

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadFileLineByLineUsingBufferedReader < public static void main(String[] args) < BufferedReader reader; try < reader = new BufferedReader(new FileReader("sample.txt")); String line = reader.readLine(); while (line != null) < System.out.println(line); // read next line line = reader.readLine(); >reader.close(); > catch (IOException e) < e.printStackTrace(); >> >

Узнайте больше о BufferedReader в API Doc (Java SE 8).

Чтение файла с помощью Scanner

С помощью класса Scanner можно открыть файл, а затем построчно прочитать его содержимое.

Ниже приведен пример чтения файла с помощью Scanner:

package com.journaldev.readfileslinebyline; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ReadFileLineByLineUsingScanner < public static void main(String[] args) < try < Scanner scanner = new Scanner(new File("sample.txt")); while (scanner.hasNextLine()) < System.out.println(scanner.nextLine()); >scanner.close(); > catch (FileNotFoundException e) < e.printStackTrace(); >> >

Рекомендуем узнать больше о Scanner в API Doc (Java SE 8).

Чтение файла с помощью java.nio.file.Files

java.nio.file.Files — это класс утилит, в котором есть разные полезные методы. С помощью метода readAllLines() можно прочитать все строки файла в виде списка.

Пример построчного чтения файла с помощью Files:

package com.journaldev.readfileslinebyline; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class ReadFileLineByLineUsingFiles < public static void main(String[] args) < try < List allLines = Files.readAllLines(Paths.get("sample.txt")); for (String line : allLines) < System.out.println(line); >> catch (IOException e) < e.printStackTrace(); >> >

Рекомендуем подробнее ознакомиться с Files в API Doc (Java SE 8).

Чтение файла с помощью RandomAccessFile

С помощью RandomAccessFile можно открыть файл в read mode, а затем с помощью метода readLine прочитать файл построчно.

Пример работы RandomAccessFile:

package com.journaldev.readfileslinebyline; import java.io.IOException; import java.io.RandomAccessFile; public class ReadFileLineByLineUsingRandomAccessFile < public static void main(String[] args) < try < RandomAccessFile file = new RandomAccessFile("sample.txt", "r"); String str; while ((str = file.readLine()) != null) < System.out.println(str); >file.close(); > catch (IOException e) < e.printStackTrace(); >> >

Узнайте больше о RandomAccessFile в API Doc (Java SE 8).

Заключение

В этом мануале мы разобрали разные способы построчного чтения содержимого файла с помощью Java.

Как прочитать файл txt на java

Есть однострочный txt файл. Как считать из файла одну строку и присвоить String переменной это значение?

Отслеживать
28.8k 12 12 золотых знаков 59 59 серебряных знаков 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; > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *