- 5 Способов чтения файла в Java – BufferedReader, FileInputStream, Файлы, Сканер, Случайный файл
- Различные способы чтения файла на Java
- Чтение двоичных файлов и текстовых файлов
- 1. BufferedReader Читает файл
- 2. FileInputStream – Считывание двоичных файлов в байты
- 3. Файлы – Чтение файла в список строк
- 4. Сканер – Считывает текстовый файл в качестве итератора
- 5. RandomAccessFile – Чтение файлов в режиме только для чтения
- Чтение и запись файлов на Java
- Вступление
- Потоки ввода-вывода
- Потоки символов
- Потоки байтов
- Потоки Java NIO
- Разница между вводом-выводом Java и NIO
- Примеры чтения и записи текстовых файлов
- Git Essentials
- Чтение и запись с помощью программы чтения файлов и пишущей машинки
- Чтение и запись с помощью BufferedReader и BufferedWriter
- Чтение и запись с помощью FileInputStream и FileOutputStream
- Чтение и запись с помощью BufferedInputStream и BufferedOutputStream
- Чтение и запись с помощью классов Java.nio
- Вывод
- Работа с файлами в Java. FileWriter и FileReader
5 Способов чтения файла в Java – BufferedReader, FileInputStream, Файлы, Сканер, Случайный файл
Как прочитать файл на Java? Мы можем использовать классы ввода-вывода Java для чтения текстовых и двоичных файлов, таких как изображения, pdf и т.д., Используя BufferedReader, FileInputStream.
Автор: Pankaj Kumar
Дата записи
Существует множество различных способов чтения файла на Java. В этом уроке мы рассмотрим 5 различных способов чтения файла на Java.
Различные способы чтения файла на Java
5 классов из API ввода-вывода Java для чтения файлов:
- Буферизатор
- Поток ввода файлов
- Файлы
- Сканер
- Случайный файл
Чтение двоичных файлов и текстовых файлов
- Класс FileInputStream считывает данные файла в поток байтов. Поэтому его следует использовать для двоичных файлов, таких как изображения, pdf, мультимедиа, видео и т.д.
- Текстовые файлы основаны на символах. Мы можем использовать классы Reader , а также потоковые классы для их чтения.
- Файлы и классы сканера можно использовать для чтения текстовых файлов, а не двоичных файлов.
Давайте рассмотрим примеры программ для чтения файла на Java.
1. BufferedReader Читает файл
Мы можем использовать BufferedReader для считывания содержимого текстового файла в массив символов .
BufferedReader эффективен для чтения файла, поскольку он буферизует входные данные из указанного файла. Без буферизации каждый вызов методов read() или readLine() будет считывать байты из файла, затем преобразовываться в символы и возвращаться, что будет очень неэффективно.
В приведенной выше программе я печатаю данные файла на консоль. Давайте рассмотрим другой класс утилит для выполнения операций чтения файлов.
- Прочитайте полный файл в виде строки
- Считывайте файл строка за строкой и возвращайте список строк
- Подсчитайте вхождение строки в данный файл.
2. FileInputStream – Считывание двоичных файлов в байты
Мы всегда должны использовать поток для чтения файлов, не основанных на символах, таких как изображения, видео и т.д.
Операция чтения FileInputStream используется с массивом байтов, в то время как операция чтения BufferedReader использует массив символов.
3. Файлы – Чтение файла в список строк
Файлы – это служебный класс, который был представлен в версии Java 1.7. Мы можем использовать его метод ReadAllLines() для чтения данных текстового файла в виде списка строк.
4. Сканер – Считывает текстовый файл в качестве итератора
Мы можем использовать класс сканера для чтения текстового файла. Он работает как итератор
5. RandomAccessFile – Чтение файлов в режиме только для чтения
Класс RandomAccessFile позволяет нам читать файл в разных режимах. Это хороший вариант, если вы хотите убедиться, что в файле не выполняется случайная операция записи.
Это все для чтения файла на Java с использованием различных классов из Java IO API.
Источник
Чтение и запись файлов на Java
В этом уроке мы будем читать и записывать файлы на Java с помощью FileReader, FileWriter, BufferedReader, BufferedWriter, FileInputStream, FileOutputStream и т. Д.
Автор: Scott Robinson
Дата записи
Вступление
В этой статье мы погрузимся в Чтение и запись файлов на Java .
При программировании, независимо от того, создаете ли вы мобильное приложение, веб-приложение или просто пишете сценарии, вам часто приходится читать или записывать данные в файл. Эти данные могут быть данными кэша, данными, которые вы получили для набора данных, изображения или практически всем, что вы можете придумать.
В этом уроке мы покажем наиболее распространенные способы чтения и записи файлов на Java.
Java предоставляет несколько API (также известных как Java I/O ) для чтения и записи файлов с момента ее первых выпусков. В последующих выпусках ввод-вывод Java был улучшен, упрощен и расширен для поддержки новых функций.
Прежде чем мы перейдем к некоторым реальным примерам, это поможет понять доступные вам классы, которые будут обрабатывать чтение и запись данных в файлы. В следующих разделах мы дадим краткий обзор классов ввода-вывода Java и объясним, что они делают, затем мы рассмотрим потоки Java NIO и, наконец, покажем некоторые примеры чтения и записи данных в файлы.
Потоки ввода-вывода
Существует два типа потоков, которые вы можете использовать для взаимодействия с файлами:
- Потоки символов
- Потоки байтов
Для каждого из вышеперечисленных типов потоков существует несколько вспомогательных классов, поставляемых с Java, которые мы кратко рассмотрим ниже.
Потоки символов
Потоки символов используются для чтения или записи типа данных символов. Давайте рассмотрим наиболее часто используемые классы. Все эти классы определены в разделе java.io посылка.
Вот некоторые классы, которые вы должны знать, которые можно использовать для чтения символьных данных:
- Reader : Абстрактный класс для чтения потока символов.
- InputStreamReader : Класс, используемый для чтения потока байтов и преобразования в поток символов.
- Средство чтения файлов : Класс для чтения символов из файла.
- BufferedReader : Это оболочка над классом Reader , которая поддерживает возможности буферизации. Во многих случаях это наиболее предпочтительный класс для чтения данных, поскольку из файла можно прочитать больше данных за один вызов read () , что уменьшает количество фактических операций ввода-вывода с файловой системой.
И вот некоторые классы, которые вы можете использовать для записи символьных данных в файл:
- Writer : Это абстрактный класс для записи потоков символов.
- OutputStreamWriter : Этот класс используется для записи потоков символов, а также для преобразования их в потоки байтов.
- Пишущая машинка : Класс для фактической записи символов в файл.
- BufferedWriter : Это оболочка над классом Writer , которая также поддерживает возможности буферизации. Это наиболее предпочтительный класс для записи данных в файл, так как в файл может быть записано больше данных за один вызов write () . И , как и BufferedReader , это уменьшает общее количество операций ввода-вывода с файловой системой.
Потоки байтов
Потоки байтов используются для чтения или записи байтовых данных с файлами. Это отличается от того, как они обрабатывали данные раньше. Здесь вы работаете с необработанными байтами, которые могут быть символами, данными изображений, данными в юникоде (для представления символа требуется 2 байта) и т. Д.
В этом разделе мы рассмотрим наиболее часто используемые классы. Все эти классы определены в разделе java.io посылка.
Вот классы, используемые для чтения байтовых данных:
- InputStream : Абстрактный класс для чтения потоков байтов.
- FileInputStream : Класс для простого считывания байтов из файла.
- BufferedInputStream : Это оболочка над InputStream , которая поддерживает возможности буферизации. Как мы видели в потоках символов, это более эффективный метод, чем FileInputStream .
А вот классы, используемые для записи байтовых данных:
- OutputStream : Абстрактный класс для записи байтовых потоков.
- FileOutputStream : Класс для записи необработанных байтов в файл.
- ByteOutputStream : Этот класс является оболочкой над OutputStream для поддержки возможностей буферизации. И опять же, как мы видели в потоках символов, это более эффективный метод, чем FileOutputStream благодаря буферизации.
Потоки Java NIO
Java NIO -это неблокирующий API ввода-вывода, который был представлен еще в Java 4 и может быть найден в пакете/| java.nio . С точки зрения производительности это большое улучшение API для операций ввода-вывода.
Буферы, селекторы и каналы являются тремя основными компонентами Java NIO, хотя в этой статье мы сосредоточимся исключительно на использовании классов NIO для взаимодействия с файлами, а не обязательно на концепциях, лежащих в основе API.
Поскольку этот учебник посвящен чтению и записи файлов, в этом коротком разделе мы обсудим только связанные классы:
- Путь : Это иерархическая структура фактического расположения файла и обычно используется для поиска файла, с которым вы хотите взаимодействовать.
- Пути : Это класс, который предоставляет несколько служебных методов для создания Пути из заданного URI строки.
- Файлы : Это еще один служебный класс, который имеет несколько методов для чтения и записи файлов, не блокируя выполнение в потоках.
Используя эти несколько классов, вы можете легко взаимодействовать с файлами более эффективным способом.
Разница между вводом-выводом Java и NIO
Основное различие между этими двумя пакетами заключается в том, что методы read() и write() блокируют вызовы области ввода-вывода Java. Под этим мы подразумеваем, что поток, вызывающий один из этих методов, будет заблокирован до тех пор, пока данные не будут прочитаны или записаны в файл.
С другой стороны, в случае NIO методы не являются блокирующими. Это означает, что вызывающие потоки могут выполнять другие задачи (например, чтение/запись данных из другого источника или обновление пользовательского интерфейса), в то время как методы чтение или запись ожидают завершения своей операции. Это может привести к значительному повышению производительности, если вы имеете дело с большим количеством запросов ввода-вывода или большим количеством данных.
Примеры чтения и записи текстовых файлов
В предыдущих разделах мы обсуждали различные API, предоставляемые Java, и теперь пришло время использовать эти классы API в некотором коде.
Приведенный ниже пример кода обрабатывает чтение и запись текстовых файлов с использованием различных классов, которые мы подробно описали выше. Чтобы упростить вещи и обеспечить лучшее сравнение используемых фактических методов, входные и выходные данные будут оставаться одинаковыми между примерами.
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Примечание : Чтобы избежать путаницы в пути к файлу, пример кода будет считываться и записываться из файла в домашнем каталоге пользователя. Домашний каталог пользователя можно найти с помощью System.getProperty(«user.home»); , который мы используем в наших примерах.
Чтение и запись с помощью программы чтения файлов и пишущей машинки
Давайте начнем с использования классов FileReader и Пишущая машинка :
Оба класса принимают строку, представляющую путь к файлу в их конструкторах. Вы также можете передать Файл объект, а также Файловый дескриптор .
Метод write() записывает допустимую последовательность символов – либо Строку , либо символ[] . Кроме того, он может записать один символ , представленный как int .
Метод read() считывает и возвращает символ за символом, позволяя нам, например, использовать считанные данные в цикле while .
Не забудьте закрыть оба этих класса после использования!
Чтение и запись с помощью BufferedReader и BufferedWriter
Использование BufferedReader и BufferedWriter классов:
Чтение и запись с помощью FileInputStream и FileOutputStream
Использование FileInputStream и FileOutputStream классов:
Чтение и запись с помощью BufferedInputStream и BufferedOutputStream
Использование BufferedInputStream и BufferedOutputStream классов:
Чтение и запись с помощью классов Java.nio
Использование классов java.nio :
Другой способ извлечения содержимого через класс Files , что более важно, если вы не читаете текстовые данные, – это использовать метод ReadAllBytes для чтения данных в массив байтов:
В случае , если вы заинтересованы в использовании потоков с java.nio , вы также можете использовать приведенные ниже методы, предоставляемые классом Files , которые работают так же, как потоки, которые мы рассмотрели ранее в статье:
Вывод
В этой статье мы рассмотрели наиболее распространенные способы чтения и записи данных в файл с использованием как пакета ввода-вывода Java, так и более нового пакета Java NIO. Всякий раз, когда это возможно, мы рекомендуем использовать классы Java NIO для файловых операций из-за его неблокирующего API, и, кроме того, код немного более удобен для обслуживания и чтения.
Источник
Работа с файлами в Java. FileWriter и FileReader
*Это Говард Стивен Берг (Howard Stephen Berg), один из самых быстро читающих людей в мире 🙂 А FileWriter — Уильям Шекспир.
- написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
- это одна из статей из нашего «Самоучителя по Java»
Рассмотрим работу с FileWriter и FileReader:
- с помощью FileWriter мы можем создавать файлы
- с помощью FileReader — считывать их
Внимание:
Потоки FileWriter и FileReader немного отличаются от того, с чем мы встречались ранее. Работая с ними, понадобится всегда помнить 3 важных момента:
Перед тем, как вызывать какие-нибудь методы для работы с файлами, нужно объявить FileWriter/FileReader:
Но Eclipse может не распознать FileReader/FileWriter и начнет ругаться. Если такое произойдет, посмотрите, импортировали ли вы библиотеку java.io.*. Для этого в самой первой строчке напишите:
2. Нужно закрыть поток
FileWriter/FileReader — это потоки, их нужно не только «открыть» (то-есть объявить), но и «закрыть» . Представьте, что Вы открыли кран. Нельзя же уйти из дому, оставив воду литься?
Это правило работает и для других потоков — кроме стандартных System.in и System.out.
Закрыть поток можно с помощью .close() :
3. Допишите «волшебную фразу».
В программировании очень важна безопасность . А работа с FileWriter/FileReader — это небезопасно , в процессе может возникнуть масса разных ошибок. Это беспокоит Eclipse (или IntellijIdea — смотря чем пользуетесь), и программу она просто так не запустит. Помните, что к методу нужно дописать «throws Exception» :
Итак, еще раз акцентируем внимание — всегда Вы должны помнить о 3 моментах:
- Объявить
- Не забыть закрыть поток
- Дописать «throws Exception»
И еще, потоки FileWriter и FileReader воспринимают все файлы как текстовые:
FileWriter
Теперь представим, что Вы начинаете использовать FileWriter.
1. Объявление.
Как Вы помните, нужно не забыть импортировать библиотеки java.io.* и дописать «волшебную фразу» к методу, где Вы собираетесь объявить FileWriter.
Объявляем, как помните, почти как Scanner:
Объявили. А что теперь можно делать? Теперь пора пользоваться возможностями FileWriter!
Основной метод FileWriter — это метод .write() .
Мало? Да, но посмотрите, как много с ним можно сделать:
*обратите внимание — мы написали нашу «волшебную фразу» и в методе main, и в методе newFile.
Так мы можем записать числа от k1 до k2, от 2 до 9, в наш файл file1.txt. Можно записывать только четные или нечетные числа, какой-нибудь текст, и многое другое.
2. Переход на следующую строку
Но мы Вам кое-чего не сказали. Если запустить код из прошлого пункта, получится:
Если понадобится вывести числа в столбик, понадобится добавить » \n » от «new line», новая строка. Запишем в файл стих:
Каждый раз, когда мы хотели, чтобы программа переходила на новую строку, мы ставили » \n «:
Теперь вы знаете, как вывести числа с новой строки:
3. Закрываем поток
После того, как Вы записали все необходимое, нужно не забыть закрыть поток. Это мы делали в каждом из приведенных примеров:
FileReader
Теперь, рассмотрим пошагово работу с FileReader.
1. Объявление
Сначала FileReader, как и FileWriter, нужно объявить . Не забудьте про библиотеку и » волшебную фразу «:
2. FileReader + Scanner
Мы объявили не только FileReader, но и Scanner. Почему?
В отличии от FileWriter, FileReader не используется один:
Не вдаваясь в подробности, запомните, что FileReader и Scanner идут вместе. Но не забывайте их «связать» — для этого напишите название вашего объекта FileReader вместо «System.in» при объявлении Scanner:
3. Методы
Тут уже больше методов. Рассмотрим методы .nextLine() и .hasNextLine().
- .nextLine() — это метод, который считывает строку (до ENTER), и возвращает это значение
- .hasNextLine() — метод, который возвращает boolean — true или false, показывая, есть ли следующая строка.
Источник