Java файлы.ppt
- Количество слайдов: 32
JAVA: работа с файлами А. И. Газейкина, доцент кафедры ИВТ и МОИ ИИи. ИТ Ур. ГПУ
Работа с файлами Автономные приложения Java могут работать как с локальными, так и с удаленными файлами (через сеть Internet или Intranet). p Апплеты не имеют доступа к локальным файлам, расположенным на компьютере пользователя, они могут обращаться к файлам, которые находятся в каталоге сервера Web. p
Классы Java для работы с потоками Виды потоков: p стандартные потоки ввода и вывода; p потоки, связанные с локальными файлами; p потоки, связанные с файлами в оперативной памяти; p потоки, связанные с удаленными файлами.
Стандартные потоки Для работы со стандартными потоками в классе System созданы три статических объекта: System. in, System. out и System. err (По своему назначению эти потоки больше всего напоминают стандартные потоки ввода, вывода и вывода сообщений об ошибках операционной системы MS-DOS). p Поток System. in связан с клавиатурой, поток System. out и System. err - с консолью приложения Java. p
Основные классы для работы с файлами и потоками p p p Input. Stream является базовым для большого количества классов, на основе которых создаются потоки ввода. Именно производные классы часто применяются, так как в них имеются более мощные методы, чем в классе Input. Stream. Они позволяют работать с потоком ввода не на уровне отдельных байт, а на уровне объектов различных классов, например, класса String и других. Output. Stream служит в качестве базового для различных классов, имеющих отношение к потокам вывода. Random. Access. File позволяет организовать работу с файлами в режиме прямого доступа (классы Input. Stream и Output. Stream можно
Основные классы для работы с файлами и потоками File предназначен для работы с оглавлениями каталогов. С помощью этого класса можно получить список файлов и каталогов, расположенных в заданном каталоге, создать или удалить каталог, переименовать файл или каталог, а также выполнить некоторые другие операции. p File. Descriptor позволяет проверить идентификатор открытого файла. p
Производные от класса Input. Stream p Filter. Input. Stream происходит непосредственно от класса Input. Stream, является абстрактным классом, на базе которого созданы классы Buffered. Input. Stream, Data. Input. Stream, Line. Number. Input. Stream и Push. Back. Input. Stream. Непосредственно класс Filter. Input. Stream не используется в приложениях Java, так как: n n он является абстрактным и предназначен для переопределения методов базового класса Input. Stream; наиболее полезные методы для работы с потоками ввода имеются в классах, созданных на базе класса Filter. Input. Stream.
Производные от класса Input. Stream (продолжение) p Buffered. Input. Stream. Буферизация операций ввода и вывода в большинстве случаев значительно ускоряет работу приложений, так как при ее использовании сокращается количество обращений к системе для обмена данными с внешними устройствами. Класс Buffered. Input. Stream может быть использован приложениями Java для организации буферизованных потоков ввода. Конструкторы этого класса в качестве параметра получают ссылку на объект класса Input. Stream. Т. о. , невозможно создать объект класса Buffered. Input. Stream, не создав перед этим объекта класса Input. Stream.
Производные от класса Input. Stream (продолжение) p Data. Input. Stream позволяет записывать в потоки данных и читать оттуда объекты различных типов (не только byte): целые числа и числа типа double, числа в формате с плавающей десятичной точкой, массивы байт и символов и так далее. Класс Data. Input. Stream содержит методы, позволяющие извлекать из входного потока данные в перечисленных выше форматах или, как говорят, выполнять форматированный ввод данных. Как и конструктор класса Buffered. Input. Stream, конструктор класса Data. Input. Stream должен получить через свои параметр ссылку на объект класса Input. Stream.
Производные от класса Input. Stream (продолжение) p p p Line. Number. Input. Stream позволяет работать с текстовыми потоками, состоящими из отдельных строк, разделенных символами возврата каретки r и перехода на следующую строку n. Методы этого класса позволяют следить за нумерацией строк в таких потоках. Push. Back. Input. Stream позволяет возвратить в поток ввода только что прочитанный оттуда символ, с тем чтобы после этого данный символ можно было прочитать снова. Byte. Array. Input. Stream позволяет создать входной поток данных не на базе локального или удаленного файла, а на базе массива, расположенного в оперативной памяти. Нужно передать конструктору класса ссылку на массив, в результате будет получен входной поток данных, связанный с этим массивом.
Производные от класса Input. Stream (продолжение) p p String. Buffer. Input. Stream позволяет создавать потоки ввода на базе строк класса String, используя при этом только младшие байты хранящихся в такой строке символов. Он может служить дополнением для класса Byte. Array. Input. Stream, предназначенного для создания потоков на базе данных из оперативной памяти. File. Input. Stream позволяет создать поток ввода на базе класса File или File. Descriptor. Piped. Input. Stream. С помощью классов Piped. Input. Stream и Piped. Output. Stream можно организовать двухстороннюю передачу данных между двумя одновременно работающими задачами мультизадачного аплета. Sequence. Input. Stream позволяет объединить несколько входных потоков в один поток. Если в процессе чтения будет достигнут конец первого потока такого объединения, в дальнейшем чтение будет выполняться из второго потока и так далее.
Класс Output. Stream предназначен для создания потоков вывода; p приложения, как правило, непосредственно не используют этот класс для операций вывода, так же как и класс Input. Stream для операций ввода. p
Классы, производные от класса Output. Stream p p p Абстрактный класс Filter. Output. Stream служит прослойкой между классом Output. Stream и классами Buffered. Output. Stream, Data. Output. Stream, а также Print. Stream. Он выполняет роль, аналогичную роли класса Filter. Intput. Stream. Buffered. Output. Stream предназначен для создания буферизованных потоков вывода. Буферизация ускоряет работу приложений с потоками. С помощью класса Data. Output. Stream приложения Java могут выполнять форматированный вывод данных. Для ввода форматированных нужно создать входной поток с использованием класса Data. Input. Stream.
Классы, производные от класса Output. Stream (продолжение) p p Print. Stream. Потоки, созданные с использованием класса Print. Stream, предназначены для форматного вывода данных различных типов с целью их визуального представления в виде текстовой строки. Byte. Array. Output. Stream позволяет создать поток вывода в оперативной памяти. File. Output. Stream позволяет создать поток вывода на базе класса File или File. Descriptor. Piped. Output. Stream. Классы Piped. Input. Stream и Piped. Output. Stream предназначены для организации двухсторонней передачи данных между двумя одновременно работающими задачами мультизадачного аплета.
Создание потоков, связанных с файлами p p Если нужно создать поток, связанный с локальным файлом, следует воспользоваться классами, созданными на базе классов Input. Stream и Output. Stream. НО: Для создания потока необходимо воспользоваться сразу несколькими классами. Например, нам нужен выходной поток для записи форматированных данных (скажем, текстовых строк класса String). Казалось бы, достаточно создать объект класса Data. Output. Stream. Однако не все так просто. В классе Data. Output. Stream предусмотрен только один конструктор, которому в качестве параметра необходимо передать ссылку на объект класса Output. Stream: public Data. Output. Stream(Output. Stream out); Конструктор класса Output. Stream выглядит следующим образом: public Output. Stream(); Ни в том, ни в другом конструкторе не предусмотрено ссылок на файлы. Непонятно, как с использованием только одних классов Output. Stream и Data. Output. Stream можно создать выходной поток, связанный с файлом.
Создание потока для форматированного обмена данными p p Создание потоков, связанных с файлами и предназначенных для форматированного ввода или вывода, выполняют в несколько приемов. При этом вначале необходимо создать потоки на базе класса File. Output. Stream или File. Input. Stream, а затем передать ссылку на созданный поток констркутору класса Data. Output. Stream или Data. Input. Stream. В классах File. Output. Stream и File. Input. Stream есть конструкторы, которым в качестве параметра передается n n n либо ссылка на объект класса File, либо ссылка на объект класса File. Descriptor, Либо текстовая строка пути к файлу: public File. Output. Stream(File file); public File. Output. Stream(File. Descriptor fd. Obj); public File. Output. Stream(String name);
Создание потока для форматированного обмена данными p Т. е. , если нужен выходной поток для записи форматированных данных: n создается поток как объект класса File. Output. Stream; n ссылка на этот объект следует передать конструктору класса Data. Output. Stream. Полученный таким образом объект класса Data. Output. Stream можно использовать как выходной поток, записывая в него форматированные данные.
Добавление буферизации Если нужен буферизованный выходной поток, используется класс Buffered. Output. Stream. В нем есть конструкторы: npublic Buffered. Output. Stream(Output. Stream out) - создает буферизованный выходной поток на базе потока класса Output. Stream; npublic Buffered. Output. Stream(Output. Stream out, int size) - делает то же самое, но дополнительно позволяет указать размер буфера в байтах.
Выходной буферизованный поток для записи форматированных данных Создание потока выполняется в три этапа: p создается поток, связанный с файлом, как объект класса File. Output. Stream; p ссылка на этот поток передается конструктору класса Buffered. Output. Stream, в результате чего создается буферизованный поток, связанный с файлом; p ссылка на буферизованный поток, созданный на предыдущем шаге, передается конструктору класса Data. Output. Stream, который и создает
Создание выходного буферизованного потока для записи форматированных данных: Data. Output. Stream Out. Stream; Out. Stream = new Data. Output. Stream( new Buffered. Output. Stream( new File. Output. Stream("output. txt")));
Создание входного буферизованного потока для чтения форматированных данных: Data. Input. Stream In. Stream; In. Stream = new Data. Input. Stream( new Buffered. Input. Stream( new File. Input. Stream("output. txt")));
Исключения при создании потоков File. Output. Stream и File. Input. Stream: p p p Исключение File. Not. Found. Exception возникает при попытке открыть входной поток данных для несуществующего файла (когда файл не найден). Исключение Security. Exception возникает при попытке открыть файл, для которого запрещен доступ. Например, если файл можно только читать, а он открывается для записи, возникнет исключение Security. Exception. Если файл не может быть открыт для записи по каким-либо другим причинам, возникает исключение IOException.
Закрывание потоков Потоки следует закрывать явным образом, вызывая для этого метод close().
Принудительный сброс буферов p p Буферизация ускоряет работу приложений с потоками, так как при ее использовании сокращается количество обращений к системе ввода/вывода. Вы можете постепенно в течении дня добавлять в поток данные по одному байту, и только к вечеру эти данные будут физически записаны в файл на диске. Во многих случаях, однако, приложение должно, не отказываясь совсем от буферизации, выполнять принудительную запись буферов в файл. Это можно сделать с помощью метода flush().
Произвольный доступ к файлам p p В ряде случаев, например, при создании системы управления базой данных, требуется обеспечить произвольный доступ к файлу. Рассмотренные нами ранее потоки ввода и вывода пригодны лишь для последовательного доступа, так как в соответствующих классах нет средств позиционирования внутри файла. Библиотека классов Java содержит класс Random. Access. File, который предназначен специально для организации прямого доступа к файлам как для чтения, так и для записи.
Класс Random. Access. File p p В классе Random. Access. File определено два конструктора: public Random. Access. File(String name, String mode) - позволяет указывать имя файла, и режим mode, в котором открывается файл; public Random. Access. File(File file, String mode) вместо имени предполагает использование объекта класса File. Если файл открывается только для чтения, вы должны передать конструктору текстовую строку режима "r". Если же файл открывается и для чтения, и для записи, конструктору передается строка "rw".
Позиционирование внутри файла p метод seek, в качестве параметра pos которому передается абсолютное смещение файла: public void seek(long pos); После вызова этого метода текущая позиция в файле устанавливается в соответствии со значением параметра pos.
Определение текущей позиций внутри файла возможно в любой момент времени с помощью метода get. File. Pointer: public long get. File. Pointer();
Закрытие файла С помощью метода close() закрывают файл, после того как работа с ним завершена: public void close();
Размер файла С помощью метода length() вы можете определить текущую длину файла (в байтах): public long length();
Методы ввода из файла p p p p public public public public public int read(); int read(byte b[], int off, int len); final boolean read. Boolean(); final byte read. Byte(); final char read. Char(); final double read. Double(); final float read. Float(); final void read. Fully(byte b[], int off, int len); final int read. Int(); final String read. Line(); final long read. Long(); final short read. Short(); final int read. Unsigned. Bytee(); final int read. Unsigned. Short(); final String read. UTF();
Методы вывода из файла p p p public public public public void final final final write(byte b[]); write(byte b[], int off, int len); write(int b); void write. Boolean(boolean v); void write. Bytee(int v); void write. Bytes(String s); void write. Char(int v); void write. Chars(String s); void write. Double(double v); void write. Float(float v); void write. Int(int v); void write. Long(long v); void write. Short(int v); void write. UTF(String str);
Java файлы.ppt