- Java — чтение из файла
- 2. Читать сBufferedReader
- 3. Читать сScanner
- 4. Читать сStreamTokenizer
- 5. Читать сDataInputStream
- 6. Читать сFileChannel
- 7. Прочитать файл в кодировке UTF-8
- 8. Прочитать файл в строку
- 9. Чтение из файла с помощью Java 7
- 9.1. Прочтите небольшой файл с помощью Java 7
- 9.2. Прочтите большой файл с помощью Java 7
- 10. Заключение
- Файл: Читать файл по «словам»
- Считывание строки из файла до точки
- Как построчно считывать файл в Java?
- Больше полезных статей!
- 5 thoughts to “Как построчно считывать файл в Java?”
Java — чтение из файла
В этом руководстве мы рассмотрим различные способыread from a File in Java; мы будем использоватьBufferedReader,Scanner,StreamTokenizer,DataInputStream,SequenceInputStream иFileChannel.
Затем мы обсудим, как прочитать файл в кодировке UTF-8 и как создать строку из содержимого файла.
Наконец, мы рассмотрим новые методы чтения из файла в Java 7.
Эта статья является частьюthe “Java – Back to Basic” series здесь для примера.
2. Читать сBufferedReader
Начнем с простого способа чтения из файла с помощьюBufferedReader; сам файл содержит:
Следующий код читает из файла с использованиемBufferedReader:
@Test public void whenReadWithBufferedReader_thenCorrect() throws IOException < String expected_value = "Hello world"; String file ="src/test/resources/test_read.txt"; BufferedReader reader = new BufferedReader(new FileReader(file)); String currentLine = reader.readLine(); reader.close(); assertEquals(expected_value, currentLine); >
Обратите внимание, чтоreadLine() вернетnull, когда будет достигнут конец файла.
3. Читать сScanner
Затем давайте воспользуемсяScanner для чтения из файла — файл содержит:
В качестве разделителя мы будем использовать простой пробел:
@Test public void whenReadWithScanner_thenCorrect() throws IOException < String file = "src/test/resources/test_read.txt"; Scanner scanner = new Scanner(new File(file)); scanner.useDelimiter(" "); assertTrue(scanner.hasNext()); assertEquals("Hello", scanner.next()); assertEquals("world", scanner.next()); assertEquals(1, scanner.nextInt()); scanner.close(); >
Обратите внимание, что разделителем по умолчанию является пробел, но можно использовать несколько разделителей сScanner.
4. Читать сStreamTokenizer
Затем давайте прочитаем текстовый файл в токены, используяStreamTokenizer.
Токенизатор работает следующим образом: сначала нам нужно выяснить, какой будет следующий токен — строка или число; мы делаем это, глядя на полеtokenizer.ttype.
Затем мы прочитаем фактический токен на основе этого типа:
Следующий код читает из файла и строку, и число:
@Test public void whenReadWithStreamTokenizer_thenCorrectTokens() throws IOException < String file = "src/test/resources/test_read.txt"; FileReader reader = new FileReader(file); StreamTokenizer tokenizer = new StreamTokenizer(reader); // token 1 tokenizer.nextToken(); assertEquals(StreamTokenizer.TT_WORD, tokenizer.ttype); assertEquals("Hello", tokenizer.sval); // token 2 tokenizer.nextToken(); assertEquals(StreamTokenizer.TT_NUMBER, tokenizer.ttype); assertEquals(1, tokenizer.nval, 0.0000001); // token 3 tokenizer.nextToken(); assertEquals(StreamTokenizer.TT_EOF, tokenizer.ttype); reader.close(); >
Обратите внимание, как маркер конца файла используется в конце.
5. Читать сDataInputStream
Мы можем использоватьDataInputStream для чтения двоичного или примитивного типа данных из файла.
Следующий тест читает файл с использованиемDataInputStream:
@Test public void whenReadWithDataInputStream_thenCorrect() throws IOException < String expectedValue = "Hello"; String file ="src/test/resources/test_read.txt"; DataInputStream reader = new DataInputStream(new FileInputStream(file)); String result = reader.readUTF(); reader.close(); assertEquals(expectedValue, result); >
6. Читать сFileChannel
Если мы читаем большой файл,FileChannel может быть быстрее, чем стандартный ввод-вывод.
Следующий код считывает байты данных из файла, используяFileChannel иRandomAccessFile:
@Test public void whenReadWithFileChannel_thenCorrect() throws IOException < String expected_value = "Hello world"; String file = "src/test/resources/test_read.txt"; RandomAccessFile reader = new RandomAccessFile(file, "r"); FileChannel channel = reader.getChannel(); int bufferSize = 1024; if (bufferSize >channel.size()) < bufferSize = (int) channel.size(); >ByteBuffer buff = ByteBuffer.allocate(bufferSize); channel.read(buff); buff.flip(); assertEquals(expected_value, new String(buff.array())); channel.close(); reader.close(); >
7. Прочитать файл в кодировке UTF-8
Теперь давайте посмотрим, как читать файл в кодировке UTF-8, используяBufferedReader:
@Test public void whenReadUTFEncodedFile_thenCorrect() throws IOException < String expected_value = "青空"; String file = "src/test/resources/test_read.txt"; BufferedReader reader = new BufferedReader (new InputStreamReader(new FileInputStream(file), "UTF-8")); String currentLine = reader.readLine(); reader.close(); assertEquals(expected_value, currentLine); >
8. Прочитать файл в строку
Мы можем эффективно использовать отStringBuilder доread the entire contents of a file into a String. Начнем с файла:
Следующий код добавляет данные, считанные из файла, вStringBuilder построчно:
@Test public void whenReadFileContentsIntoString_thenCorrect() throws IOException < String expected_value = "Hello world n Test line n"; String file = "src/test/resources/test_read.txt"; BufferedReader reader = new BufferedReader(new FileReader(file)); StringBuilder builder = new StringBuilder(); String currentLine = reader.readLine(); while (currentLine != null) < builder.append(currentLine); builder.append("n"); currentLine = reader.readLine(); >reader.close(); assertEquals(expected_value, builder.toString()); >
9. Чтение из файла с помощью Java 7
Java 7 представляет новый способ работы с файлами и файловой системой — давайте воспользуемся им для чтения файлов.
9.1. Прочтите небольшой файл с помощью Java 7
Следующий код показывает, как читать небольшой файл с помощью нового классаFiles:
@Test public void whenReadSmallFileJava7_thenCorrect() throws IOException < String expected_value = "Hello world"; Path path = Paths.get("src/test/resources/test_read.txt"); String read = Files.readAllLines(path).get(0); assertEquals(expected_value, read); >
Обратите внимание, что вы также можете использовать методreadAllBytes(), если вам нужны двоичные данные.
9.2. Прочтите большой файл с помощью Java 7
Если мы хотим прочитать большой файл с классомFiles, мы можем использоватьBufferedReader.
Следующий код читает файл, используя новый классFiles иBufferedReader:
@Test public void whenReadLargeFileJava7_thenCorrect() throws IOException < String expected_value = "Hello world"; Path path = Paths.get("src/test/resources/test_read.txt"); BufferedReader reader = Files.newBufferedReader(path); String line = reader.readLine(); assertEquals(expected_value, line); >
10. Заключение
Как видите, существует много возможностей для чтения данных из файла с использованием простой Java. Вы можете выбратьBufferedReader для чтения построчно,Scanner для чтения с использованием разных разделителей,StreamTokenizer для чтения файла в токены,DataInputStream для чтения двоичных данных и примитивных данных типы,SequenceInput Stream для связывания нескольких файлов в один поток,FileChannel для более быстрого чтения из больших файлов и т. д.
Файл: Читать файл по «словам»
Подскажите как переделать код, чтобы файл читался по «словам» т.е. прочитав первую строку переменной String n присвоить значение «АААА»,а переменной int i присвоить значение 111.
Читать файл, с последующим выводом на экран
Есть текстовый файл, содержимое которого выглядит следующим образом: Noah 18090 Liam .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class ReadText { public static void main(String[] args) throws IOException { InputStream in= new FileInputStream("aaa.txt"); int c; String s = ""; while((in.available())!=1){ c = in.read(); if((int)c!=32){ s = s + (char)c; } else { System.out.println(s); s = ""; } } in.close(); } }
На экран выводит
AAAA
111
BBBB
222
CCCC
Но всеравно, каждая последовательность знаков воспринимается как String. Далее осталось сделать так, чтобы числа записывались в переменную int?Буду думать
Считывание строки из файла до точки
Считывание из файла последней строки
Есть файл в нем хранится записи: 72 23.03.2015 10:37:28 7348537A889PB1 72 23.03.2015.
Считывание координат точки с файла
в текстовом файле POINTS.DAT содержатся координаты ста точек на плоскости (одна строчка.
Считывание символов из текстового файла до первой точки
нужна прога, с интерфейсом, которая считает количество символов не открытом тексте до точки вроде.
Считывание строки из файла до символа переноса строки
К примеру у меня есть текстовый файл, который содержит в себе несколько строчек символов. Мне надо.
private void read(String fileName) throws IOException ch == '?' System.out.println(sb.toString()); }
Сообщение от YuraAAA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
import java.io.*; public class Readfile { public void readFile(){ int line; try(BufferedReader br = new BufferedReader(new FileReader("filename.txt"))) { while((line = br.read()) != -1){ if(line == '.'){ System.out.print('.'); System.out.println(""); }else if(line == '!'){ System.out.print('!'); System.out.println(""); }else if(line == '?'){ System.out.print('?'); System.out.println(""); }else { System.out.print((char)line); } } } catch (FileNotFoundException e) { System.err.println("При чтении файла: " + e.getMessage()); } catch (IOException e) { System.err.println("При чтении файла: " + e.getMessage()); } } }
public static void main(String. args){ Readfile rf = new Readfile(); rf.readFile(); }
Считывание Определенной Строки Из Файла По Номеру Строки?
Считывание Определенной Строки Из Файла По Номеру Строки? // В БД Слов содержиться в текстовом.
Считывание строки из файла.
Появилась проблема. Строка из файла считывается, но не реагирует на пробелы. И не находит конец.
Считывание строки с файла
Подскажите как сделать так чтобы с файла считывало не одну строку а все! #include "stdafx.h".
Считывание строки из файла
Появилась жесткая потребность написать кусок кода на Java. Сам пишу на С++, с Java дел не имел.
Как построчно считывать файл в Java?
Сегодня мы рассмотрим одну из наиболее частых операций с файлами в Java, а именно построчное считывание содержимого файла.
Программа ниже покажет это на примере.
Вот такой простой и эффективный способ построчного считывания файла.
Следите за остальными статьями из раздела «Операции ввода-вывода«.
Больше полезных статей!
5 thoughts to “Как построчно считывать файл в Java?”
Подскажите пожалуйста, как каждый элемент при считывании из файла добавить в коллекцию, чтобы потом эту коллекцию прогнать через другой метод. Скажем в файле находиться урлы, и хочеться их прочитать, а потом открыть..
Давайте рассмотрим ситуацию, где каждый урл в файле находится на отдельной строке. В этом случае Вам нужно вначале метода создать список, например, List listOfUrls = new ArrayList<>(); и затем в приведенном выше коде заменить код line = reader.readLine(); на listOfUrls.add(reader.readLine()) . Далее просто передаете полученный список ссылок в качестве параметра в свой метод. Удачи!
Где закрытие ресурсов-то? Путь хардкодить в том же методе — очень плохо. Лучше уже вынести если не в отдельный класс, то хоть в отдельный метод, принимающий путь
А как сделать так, чтобы каждая строка становилась переменной, например первая строка была переменной String name, вторая int age и так далее