33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики
Скачать 1.6 Mb.
|
Работа с FileWriter и FileReaderОтметим, что работа с классом FileWriter ничем не отличается от работы с классом FileOutputStream. Все можно свести к замене наименования классов. Однако с подклассом FileReader такое утверждение, к сожалению, не верно. Рассмотрим более подробно правила работы с подклассом FileReader. Первое что необходимо отметить, что при работе с FileReader необходимо объявить не только объект этого класса, но еще и объект класса Scaner. При этом конструктор Scaner-а должен быть проинициализирован уже созданным объектом FileReader-а. Формат: FileReader Объект = new FileReader("Путь+имяФайла"); Scanner ОбъектСканера = new Scanner(Объект); Далее необходимо использовать методы класса Scanner, уже обсужденные выше. Пример. FileReader fr= new FileReader("file1.txt"); Scanner scan = new Scanner(fr); while (scan.hasNextLine()) { System.out.println(scan.nextLine()); } Замечание. Работа с методамиnextLine() и hasNextLine() полностьюаналогичнаиспользованиюитераторовв коллекциях Переделаем последний пример предыдущего пункта на использование объектов подкласса FileWriter суперкласса Writer и подкласса FileReader суперкласса Reader. В отличие от предыдущего примера, выполним запись, а затем чтение из одного и того же файла. Отличительной особенностью исполнения данного примера является разделение работы с файлами на методы. Кроме того, в данном примере исключительная ситуация будет пробрасываться через цепочку вызовов методами Java-машине через конструкцию throws Исключение. Пример. Результат работы программы: Буферизованные потокиДля оптимизации операций ввода-вывода используются буферизуемые потоки. Эти потоки добавляют к стандартным специальный буфер в памяти, с помощью которого повышается производительность при чтении и записи потоков. Класс BufferedOutputStreamКласс BufferedOutputStream создает буфер для потоков вывода. Этот буфер накапливает выводимые байты без постоянного обращения к устройству. И когда буфер заполнен, производится запись данных. BufferedOutputStream определяет два конструктора: BufferedOutputStream(OutputStream outputStream) BufferedOutputStream(OutputStream outputStream, int bufSize) Первый параметр (outputStream) - это поток вывода, который унаследован от OutputStream, а второй параметр - размер буфера. Рассмотрим на примере записи в файл. Пример. Результат работы программы: Класс BufferedOutputStream в конструкторе принимает в качестве параметра объект OutputStream - в данном случае это файловый поток вывода FileOutputStream. И также производится запись в файл. Опять же BufferedOutputStream не добавляет много новой функциональности, он просто оптимизирует действие потока вывода. |