Скачать презентацию Java IO Система ввода-вывода Скачать презентацию Java IO Система ввода-вывода

Season 2 - Java io.pptx

  • Количество слайдов: 33

Java IO Java IO

Система ввода-вывода • • • Потоки ввода-вывода Файловый ввод-вывод и конвертация потоков Робота с Система ввода-вывода • • • Потоки ввода-вывода Файловый ввод-вывод и конвертация потоков Робота с файлами Фильтрующие потоки Дополнительные возможности потоков Ввод-вывод и исключения

1. Потоки ввода - вывода 1. Потоки ввода - вывода

Ввод-вывод в Java • • Потоки ввода-вывода Пакет java. io Input. Stream 48 65 Ввод-вывод в Java • • Потоки ввода-вывода Пакет java. io Input. Stream 48 65 6 C 6 C 6 F Output. Stream Reader Hello Writer

Виды потоков • Направление Ввод Вывод • Содержимое Вывод Байтовый 48 65 6 C Виды потоков • Направление Ввод Вывод • Содержимое Вывод Байтовый 48 65 6 C 6 C 6 F Байтовые Символьный Hello

Классы потоков Байтовый Символьный Ввод Input. Stream Reader Вывод Output. Stream Writer Классы потоков Байтовый Символьный Ввод Input. Stream Reader Вывод Output. Stream Writer

Методы Input. Stream: Output. Stream: read() read(byte b[], int off, int len) skip(long n) Методы Input. Stream: Output. Stream: read() read(byte b[], int off, int len) skip(long n) available() close() write(int b) write(byte b[], int off, int len) flush() close()

Пример: Блочное копирование void copy(Input. Stream is, Output. Stream os) throws IOException { byte[] Пример: Блочное копирование void copy(Input. Stream is, Output. Stream os) throws IOException { byte[] b = new byte[1024]; int c = 0; while ((c = is. read(b)) >= 0) { os. write(b, 0, c); } }

2. Файловый ввод-вывод и конвертация потоков 2. Файловый ввод-вывод и конвертация потоков

Классы файлового ввода-вывода Классы File* File. Input. Stream File. Output. Stream File. Reader File. Классы файлового ввода-вывода Классы File* File. Input. Stream File. Output. Stream File. Reader File. Writer File. Reqder input. txt Hello 48 65 6 C 6 C 6 F File. Output. Stream output. dat

Создание файловых потоков • Для ввода-вывода File*(File file) — по дескриптору File*(String file) — Создание файловых потоков • Для ввода-вывода File*(File file) — по дескриптору File*(String file) — по имени • Для дописывания File*(File file, boolean append) — по дескриптору File*(String file, boolean append) — по имени

Пример: преобразования регистра Файл input. txt копируется в output. txt с изменением регистра Reader Пример: преобразования регистра Файл input. txt копируется в output. txt с изменением регистра Reader reader = new File. Reader("input. txt"); Writer writer = new File. Writer("output. txt"); int c = 0; while ((c = reader. read()) >= 0) { writer. write(Character. to. Upper. Case((char) c)); } reader. close(); writer. close();

Байтовый поток в символьный • • При чтении возможно преобразование байтового потока в символьный, Байтовый поток в символьный • • При чтении возможно преобразование байтового потока в символьный, с указанием кодировки Класс Input. Stream. Reader(Input. Stream, encoding? ) Символьный поток в байтовый • • При записи возможно преобразование символьного потока в байтовый, с указанием кодировки Класс Output. Stream. Writer(Output. Stream, encoding? )

Пример: перекодирование файла Файл input. txt копируется в output. txt с изменением кодировки с Пример: перекодирование файла Файл input. txt копируется в output. txt с изменением кодировки с Cp 1251 на Cp 866 Reader reader = new Input. Stream. Reader( new File. Input. Stream("input. txt"), "Cp 1251"); Writer writer = new Output. Stream. Writer( new File. Output. Stream("output. txt"), "Cp 866"); int c = 0; while ((c = reader. read()) >= 0) writer. write(c); reader. close(); writer. close();

3. Работа с файлами 3. Работа с файлами

Работа с путями File java = new File ( Работа с путями File java = new File ("/usr/bin/java "); java. is. Absolute (); // true java. get. Path (); // "/usr/bin/java " java. get. Name (); // " java. get. Parent (); // "/usr/bin " • • Файла по этому пути может не быть Поддерживаются абсолютные и относительные пути

Работа с путями • • String get. Absolute. Path() File get. Absolute. File() Если Работа с путями • • String get. Absolute. Path() File get. Absolute. File() Если путь файла не абсолютный, то он разрешается относительно текущей директории — System. get. Property("user. dir") String get. Canonical. Path() File get. Canonical. File() Путь преобразуется в абсолютный, убираются компоненты. и. . , разрешаются символические ссылки

Робота с файлами File java = new File ( Робота с файлами File java = new File ("/usr /bin / java "); java. exists (); // true java. is. File (); // true java. can. Read (); // true java. length (); // 1536 java. last. Modified (); // 1231914805000 • Если файла нет, length() и last. Modified() возвращают 0

Работа с директориями File usrbin = new File ( Работа с директориями File usrbin = new File ("/ usr /bin "); usrbin. exists (); // true usrbin. is. Directory (); // true usrbin. list (); // array of Strings usrbin. list. Files (); // array of Files • Если директория не существует, list() вернет null

Модификация файловой системы • • boolean create. New. File() Создает пустой файл, если он Модификация файловой системы • • boolean create. New. File() Создает пустой файл, если он еще не существует boolean delete() Удаляет файл. Если это директория, то она должна быть пустой boolean rename. To(File dest) Перемещает файл. Перемещение на другую ФС может не работать. Перемещение поверх существующего файла тоже. boolean mkdir() boolean mkdirs() Создает директорию или директории.

4. Фильтрующие потоки 4. Фильтрующие потоки

Фильтрующие потоки • • Направляют все вызовы вложенному потоку Классы Filter* Filter. Input. Stream Фильтрующие потоки • • Направляют все вызовы вложенному потоку Классы Filter* Filter. Input. Stream Filter. Output. Stream

Буферизующие потоки • Содержат буфер, который считывают / • записывают целиком Классы Buffered* Buffered. Буферизующие потоки • Содержат буфер, который считывают / • записывают целиком Классы Buffered* Buffered. Input. Stream, Buffered. Output. Stream

5. Дополнительные возможности потоков 5. Дополнительные возможности потоков

Эмуляция чтения • • Чтение производится из буфера в памяти передаваемого конструктору Классы: Byte. Эмуляция чтения • • Чтение производится из буфера в памяти передаваемого конструктору Классы: Byte. Array. Input. Stream - чтение из массива байт Char. Array. Reader - чтение из массива символов String. Reader - чтение из строки

Эмуляция записи • • Запись производится в буфер в памяти, который доступен в любое Эмуляция записи • • Запись производится в буфер в памяти, который доступен в любое время Классы: Byte. Array. Output. Stream – запись в массив байт (to. Byte. Array()) Char. Array. Writer – запись в массив символов (to. String(), to. Char. Array()) String. Writer – запись в String. Buffer (to. String(), to. String. Buffer())

Конкатенация потоков • • • Несколько байтовых потоков можно конкатенировать Если первый из потоков Конкатенация потоков • • • Несколько байтовых потоков можно конкатенировать Если первый из потоков закончился, производится чтение из второго и т. д. Класс Sequence. Input. Stream(Input. Stream, Input. Stream) – конкатенация двух потоков Sequence. Input. Stream(Enumeration) – конкатенация нескольких потоков

6. Ввод-вывод и исключения 6. Ввод-вывод и исключения

Обычная обработка исключений Reader reader = new File. Reader( Обычная обработка исключений Reader reader = new File. Reader("input. txt"); try { // Операции с файлом } finally { reader. close(); }

Надежная обработка исключений Reader reader = new File. Reader( Надежная обработка исключений Reader reader = new File. Reader("input. txt"); try { // Операции с файлом reader. close(); } catch (IOException e) { try { reader. close(); } catch (IOException e) { /* Ignoring */ } throw e; }

Альтернативный метод Reader reader = null; try { reader = new File. Reader( Альтернативный метод Reader reader = null; try { reader = new File. Reader("input. txt"); … } finally { if (reader != null) { reader. close(); } }

Случай нескольких потоков Reader reader = new File. Reader( Случай нескольких потоков Reader reader = new File. Reader("input. txt"); try { Writer writer = new File. Writer("output. txt"); try { // Операции ввода-вывода. . . } finally { writer. close(); } } finally { reader. close(); }

Вопросы Вопросы