Ввод-вывод

Содержание

Слайд 2

Java Advanced / Ввод-вывод

Содержание

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

Java Advanced / Ввод-вывод Содержание Потоки ввода-вывода Файловый ввод-вывод и конвертация потоков
ввод-вывод
Дескрипторы файлов
Ввод-вывод и исключения
Форматированный ввод-вывод
Заключение

Слайд 3

Java Advanced / Ввод-вывод

Ввод-вывод в Java

Потоки ввода-вывода
Пакет java.io

Java Advanced / Ввод-вывод Ввод-вывод в Java Потоки ввода-вывода Пакет java.io

Слайд 4

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

Часть 1

Потоки ввода-вывода Часть 1

Слайд 5

Java Advanced / Ввод-вывод

Виды потоков

Направление
Ввод
Вывод
Содержимое
Байтовые
Символьные

Java Advanced / Ввод-вывод Виды потоков Направление Ввод Вывод Содержимое Байтовые Символьные

Слайд 6

Java Advanced / Ввод-вывод

Классы потоков

Java Advanced / Ввод-вывод Классы потоков

Слайд 7

Java Advanced / Ввод-вывод

Исключительные ситуации

Класс IOException
Корень иерархии исключений ввода-вывода
Бросается всеми операциями ввода/вывода
Класс

Java Advanced / Ввод-вывод Исключительные ситуации Класс IOException Корень иерархии исключений ввода-вывода
EOFException
Достигнут конец потока
Класс FilenotFoundException
Файл не найден
Класс UnsupportedEncodingException
Неизвестная кодировка

Слайд 8

Java Advanced / Ввод-вывод

Потоки ввода

Основные операции
int read() — чтение элемента
read(T[] v), read(T[]

Java Advanced / Ввод-вывод Потоки ввода Основные операции int read() — чтение
v, off, len) — чтение элементов в массив
Дополнительные операции
skip(n) — пропуск n элементов
close() — закрытие потока
Пометки и возвраты
mark(limit) — пометка текущей позиции
reset() — возврат к помеченной позиции

Слайд 9

Java Advanced / Ввод-вывод

Потоки вывода

Основные операции
write(int v) — запись элемента
write(T[] v) —

Java Advanced / Ввод-вывод Потоки вывода Основные операции write(int v) — запись
запись массива элементов
write(T[] v, off, len) — запись части массива
Дополнительные операции
flush() — запись буфера
close() — закрытие потока

Слайд 10

Java Advanced / Ввод-вывод

Пример: Блочное копирование

Процедура копирования
void copy(InputStream is, OutputStream os)
throws

Java Advanced / Ввод-вывод Пример: Блочное копирование Процедура копирования void copy(InputStream is,
IOException
{
byte[] b = new byte[1024];
int c = 0;
while ((c = is.read(b)) >= 0) {
os.write(b, 0, c);
}
}

Слайд 11

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

Часть 2

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

Слайд 12

Java Advanced / Ввод-вывод

Классы файлового ввода-вывода

Классы File*
FileInputStream
FileOutputStream
FileReader
FileWriter

Java Advanced / Ввод-вывод Классы файлового ввода-вывода Классы File* FileInputStream FileOutputStream FileReader FileWriter

Слайд 13

Java Advanced / Ввод-вывод

Создание файловых потоков

Для символьных потоков используется кодировка по умолчанию
Для

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

Слайд 14

Java Advanced / Ввод-вывод

Пример: преобразования регистра

Файл input.txt копируется в output.txt с изменением

Java Advanced / Ввод-вывод Пример: преобразования регистра Файл input.txt копируется в output.txt
регистра
Reader reader = new FileReader("input.txt");
Writer writer = new FileWriter("output.txt");
int c = 0;
while ((c = reader.read()) >= 0) {
writer.write(Character.toUpperCase((char) c));
}
reader.close();
writer.close();

Слайд 15

Java Advanced / Ввод-вывод

Байтовый поток ? символьный

При чтении возможно преобразование байтового

Java Advanced / Ввод-вывод Байтовый поток ? символьный При чтении возможно преобразование
потока в символьный, с указанием кодировки
Класс InputStreamReader
InputStreamReader(InputStream, encoding?)

Слайд 16

Java Advanced / Ввод-вывод

Символьный поток ? байтовый

При записи возможно преобразование символьного потока

Java Advanced / Ввод-вывод Символьный поток ? байтовый При записи возможно преобразование
в байтовый, с указанием кодировки
Класс OutputStreamWriter
OutputStreamWriter(OutputStream, encoding?)

Слайд 17

Java Advanced / Ввод-вывод

Пример: перекодирование файла

Файл input.txt копируется в output.txt с изменением

Java Advanced / Ввод-вывод Пример: перекодирование файла Файл input.txt копируется в output.txt
кодировки с Cp1251 на Cp866
Reader reader = new InputStreamReader(
new FileInputStream("input.txt"), "Cp1251");
Writer writer = new OutputStreamWriter(
new FileOutputStream("output.txt"), "Cp866");
int c = 0;
while ((c = reader.read()) >= 0) writer.write(c);
reader.close();
writer.close();

Слайд 18

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

Часть 3

Фильтрующие потоки Часть 3

Слайд 19

Java Advanced / Ввод-вывод

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

Направляют все вызовы вложенному потоку
Классы Filter*

Java Advanced / Ввод-вывод Фильтрующие потоки Направляют все вызовы вложенному потоку Классы Filter*

Слайд 20

Java Advanced / Ввод-вывод

Буферизующие потоки

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

Java Advanced / Ввод-вывод Буферизующие потоки Содержат буфер, который считывают / записывают целиком Классы Buffered*

Слайд 21

Java Advanced / Ввод-вывод

Чтение с возвратом

Позволяют “заталкивать” в поток символы, которые затем

Java Advanced / Ввод-вывод Чтение с возвратом Позволяют “заталкивать” в поток символы,
будут “прочитаны”
Классы Pushback*
Методы
unread(b) – затолкнуть один символ
unread(T[] v), unread(T[] v, off, len) – затолкнуть несколько символов

Слайд 22

Java Advanced / Ввод-вывод

Пример: шифрующий поток

public class EncodingOutputStream extends FilterOutputStream {
private

Java Advanced / Ввод-вывод Пример: шифрующий поток public class EncodingOutputStream extends FilterOutputStream
final int key;
public EncodingOutputStream(OutputStream os, int key) {
super(os);
this.key = key;
}
public void write(int b) throws IOException {
super.write(b ^ key);
}
}

Слайд 23

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

Часть 4

Дополнительные возможности потоков Часть 4

Слайд 24

Java Advanced / Ввод-вывод

Эмуляция чтения

Чтение производится из буфера в памяти, передаваемого конструктору
Классы
ByteArrayInputStream

Java Advanced / Ввод-вывод Эмуляция чтения Чтение производится из буфера в памяти,
– чтение из массива байт
CharArrayReader – чтение из массива символов
StringReader – чтение из строки

Слайд 25

Java Advanced / Ввод-вывод

Эмуляция записи

Запись производится в буфер в памяти, который доступен

Java Advanced / Ввод-вывод Эмуляция записи Запись производится в буфер в памяти,
в любое время
Классы
ByteArrayOutputStream – запись в массив байт (toByteArray())
CharArrayWriter – запись в массив символов (toString(), toCharArray())
StringWriter – запись в StringBuffer (toString(), toStringBuffer())

Слайд 26

Java Advanced / Ввод-вывод

Конкатенация потоков

Несколько байтовых потоков можно конкатенировать
Если первый из потоков

Java Advanced / Ввод-вывод Конкатенация потоков Несколько байтовых потоков можно конкатенировать Если
закончился, производится чтение из второго и т.д.
Класс SequenceInputStream
SequenceInputStream(InputStream, InputStream) – конкатенация двух потоков
SequenceInputStream(Enumeration) – конкатенация нескольких потоков

Слайд 27

Java Advanced / Ввод-вывод

Вывод с подавлением ошибок

Вывод осуществляется построчно, с подавлением ошибок
Класс

Java Advanced / Ввод-вывод Вывод с подавлением ошибок Вывод осуществляется построчно, с
PrintWriter
checkError() – проверить, была ли ошибка
print(…) – запись без перевода строки
println(…) – запись с переводом строки

Слайд 28

Java Advanced / Ввод-вывод

Ввод с подсчетом строк

Ввод осуществляется построчно, с подсчетом количества

Java Advanced / Ввод-вывод Ввод с подсчетом строк Ввод осуществляется построчно, с
строк
Класс LineNumberReader
lineNumber() – текущий номер строки

Слайд 29

Расширенный ввод-вывод

Часть 5

Расширенный ввод-вывод Часть 5

Слайд 30

Java Advanced / Ввод-вывод

Расширенная запись данных

Платформонезависимая запись примитивных типов и строк
Интерфейс DataOutput
writeT(T)

Java Advanced / Ввод-вывод Расширенная запись данных Платформонезависимая запись примитивных типов и
– запись примитивных типов
writeUnsignedByte() / writeUnsignedShort() – запись беззнаковых целых
writeUTF() – запись строки в кодировке UTF-8
Реализация
DataOutputStream

Слайд 31

Java Advanced / Ввод-вывод

Расширенное чтение данных

Платформонезависимое чтение примитивных типов и строк
Интерфейс DataInput
T

Java Advanced / Ввод-вывод Расширенное чтение данных Платформонезависимое чтение примитивных типов и
readT() – чтение примитивных типов
readUnsignedByte() / readUnsignedShort() – чтение беззнаковых целых
readUTF() – чтение строки в кодировке UTF-8
Реализация
DataInputStream

Слайд 32

Java Advanced / Ввод-вывод

Файлы c произвольным доступом

Класс RandomAccessFile
Реализует DataInput, DataOutput
Конструктор
RandomAccessFile(file, mode) –

Java Advanced / Ввод-вывод Файлы c произвольным доступом Класс RandomAccessFile Реализует DataInput,
открыть файл в заданном режиме

Слайд 33

Java Advanced / Ввод-вывод

Дополнительные операции

Методы
length() – получить размер файла
setLength() – установить

Java Advanced / Ввод-вывод Дополнительные операции Методы length() – получить размер файла
размер файла
getFilePointer() – получить положение указателя
seek(long) – установить положения указателя

Слайд 34

Java Advanced / Ввод-вывод

Класс System

out – PrintStream для stdout
err – PrintStream для

Java Advanced / Ввод-вывод Класс System out – PrintStream для stdout err
stderr
in – InputStream для stdin
setOut(.) / setErr(.) / setIn(.) – установка консольных потоков
console() – символьный доступ к консоли

Слайд 35

Java Advanced / Ввод-вывод

Класс Console

format/printf(format, args) – Форматированный вывод
reader() – Reader для

Java Advanced / Ввод-вывод Класс Console format/printf(format, args) – Форматированный вывод reader()
stdin
writer() – Writer для stdout
readLine() – чтение строки текста
readPassword(format?, args?) – чтение пароля

Слайд 36

Дескрипторы файлов

Часть 6

Дескрипторы файлов Часть 6

Слайд 37

Java Advanced / Ввод-вывод

Дескрипторы файлов

Позволяют осуществлять манипуляции с файлами
Класс File
Создание дескриптора по

Java Advanced / Ввод-вывод Дескрипторы файлов Позволяют осуществлять манипуляции с файлами Класс
имени
File(pathname) – абсолютный или относительный путь
В дескриптора по имени и директории
File(File dir, name)
File(String dir, name)

Слайд 38

Java Advanced / Ввод-вывод

Разделители

separator / separtorChar – платформозависимый разделитель директорий
pathSeparator / pathSeparatorChar

Java Advanced / Ввод-вывод Разделители separator / separtorChar – платформозависимый разделитель директорий
– платформозависимый разделитель в файлов и директорий в путях

Слайд 39

Java Advanced / Ввод-вывод

Операции с дескрипторами

Получение информации
getName() – получить имя
getPath() – получить

Java Advanced / Ввод-вывод Операции с дескрипторами Получение информации getName() – получить
имя и путь
getAbsolutePath() – получить абсолютный путь
getAbsoluteFile() – получить абсолютный дескриптор
Определение родителя
String getParent() – как строки
File getParetnFile() – как дескриптора

Слайд 40

Java Advanced / Ввод-вывод

Операции с файлами (1)

Проверка типа
isFile() – является ли файлом
isDirectory()

Java Advanced / Ввод-вывод Операции с файлами (1) Проверка типа isFile() –
– является ли директорией
isHidden() – является ли скрытым
Получение информации о файла
exist() – проверка существования
length() – длина файла
lastModifier() – время последней модификации

Слайд 41

Java Advanced / Ввод-вывод

Операции с файлами (2)

Создание
mkdir() – создать одну директорию
mkdirs() –

Java Advanced / Ввод-вывод Операции с файлами (2) Создание mkdir() – создать
создать все директории
createNewFile() – создать пустой файл
Удаление
delete() – удалить немедленно
deleteOnExit() – удалить после завершения
Переименование / перенос
renameTo(file) – переименовать / перенисти в заданное место

Слайд 42

Java Advanced / Ввод-вывод

Листинг директории

Листинг всех файлов
String[] list() – получить имена файлов
File[]

Java Advanced / Ввод-вывод Листинг директории Листинг всех файлов String[] list() –
listFiles() – получить дескрипторы файлов
Листинг по критерию
String[] list(FileNameFilter) – получить имена файлов
File[] listFiles(FileFilter) – получить дескрипторы файлов

Слайд 43

Java Advanced / Ввод-вывод

Проверка доступа к файлам

canReadFile() – проверка возможности чтения
canWriteFile() –

Java Advanced / Ввод-вывод Проверка доступа к файлам canReadFile() – проверка возможности
проверка возможности записи
canExecuteFile() – проверка возможности чтения

Слайд 44

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

Часть 7

Ввод-вывод и исключения Часть 7

Слайд 45

Java Advanced / Ввод-вывод

Обычная обработка исключений

Reader reader = new FileReader("input.txt");
try {
//

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

Слайд 46

Java Advanced / Ввод-вывод

Надежная обработка исключений

Reader reader = new FileReader("input.txt");
try {
//

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

Слайд 47

Java Advanced / Ввод-вывод

Альтернативный метод

Reader reader = null;
try {
reader = new

Java Advanced / Ввод-вывод Альтернативный метод Reader reader = null; try {
FileReader("input.txt");

} finally {
if (reader != null) {
reader.close();
}
}

Слайд 48

Java Advanced / Ввод-вывод

Случай нескольких потоков

Reader reader = new FileReader("input.txt");
try {
Writer

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

Слайд 49

Java Advanced / Ввод-вывод

Подавление исключений

PrintWriter
checkError()
PrintStream
checkErrors()
Scanner
ioException()

Java Advanced / Ввод-вывод Подавление исключений PrintWriter checkError() PrintStream checkErrors() Scanner ioException()

Слайд 50

Заключение

Часть 8

Заключение Часть 8

Слайд 51

Java Advanced / Ввод-вывод

Ссылки

I/O tutorial // http://java.sun.com/docs/books/tutorial/essential/io/index.html
I/O in Java 2 Platform //

Java Advanced / Ввод-вывод Ссылки I/O tutorial // http://java.sun.com/docs/books/tutorial/essential/io/index.html I/O in Java 2 Platform // http://java.sun.com/j2se/1.5.0/docs/guide/io/
http://java.sun.com/j2se/1.5.0/docs/guide/io/