Содержание

  1. Потоки ввода-вывода
    1. Четыре вида потоков
    2. Операции с потоками
    3. Исключения ввода-вывода
  2. Файловый ввод-вывод и преобразование потоков
    1. Классы файловых потоков
    2. Кодировки и преобразование потоков
  3. Фильтрующие потоки
    1. Фильтрация
    2. Буферизация
  4. Дополнительные возможности потоков
    1. Эмуляция чтения и записи
    2. Конкатенация потоков ввода
    3. Подавление ошибок
  5. Расширенный ввод-вывод
    1. Платформонезависимый ввод-вывод
    2. Файлы с произвольным доступом
    3. Классы System и Console
  6. Дескрипторы файлов
    1. Файлы, каталоги, пути и разделители
    2. Операции с отдельными файлами
    3. Листинг каталогов
  7. Ввод-вывод в Java 7
    1. Файловые системы и пути
    2. Операции с отдельными файлами
    3. Листинг каталогов
  8. Ввод-вывод и исключения
    1. Идиома работы с ресурсами
    2. Работа с несколькими потоками

Слайды

HTML

Примеры

zip

Домашнее задание 1. Обход файлов

Обход файлов
  1. Разработайте класс Walk, осуществляющий подсчет хеш-сумм файлов.
    1. Формат запуска
      java Walk <входной файл> <выходной файл>
    2. Входной файл содержит список файлов, которые требуется обойти.
    3. Выходной файл должен содержать по одной строке для каждого файла. Формат строки:
      <шестнадцатеричная хеш-сумма> <путь к файлу>
    4. Для подсчета хеш-суммы используйте алгоритм FNV.
    5. Если при чтении файла возникают ошибки, укажите в качестве его хеш-суммы 00000000.
    6. Кодировка входного и выходного файлов — UTF-8.
    7. Размеры файлов могут превышать размер оперативной памяти.
    8. Пример

      Входной файл

                              java/info/kgeorgiy/java/advanced/walk/samples/1
                              java/info/kgeorgiy/java/advanced/walk/samples/12
                              java/info/kgeorgiy/java/advanced/walk/samples/123
                              java/info/kgeorgiy/java/advanced/walk/samples/1234
                              java/info/kgeorgiy/java/advanced/walk/samples/1
                              java/info/kgeorgiy/java/advanced/walk/samples/binary
                              java/info/kgeorgiy/java/advanced/walk/samples/no-such-file
                          

      Выходной файл

                              050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                              2076af58 java/info/kgeorgiy/java/advanced/walk/samples/12
                              72d607bb java/info/kgeorgiy/java/advanced/walk/samples/123
                              81ee2b55 java/info/kgeorgiy/java/advanced/walk/samples/1234
                              050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                              8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                              00000000 java/info/kgeorgiy/java/advanced/walk/samples/no-such-file
                          
  2. Усложненная версия:
    1. Разработайте класс RecursiveWalk, осуществляющий подсчет хеш-сумм файлов в директориях
    2. Входной файл содержит список файлов и директорий, которые требуется обойти. Обход директорий осуществляется рекурсивно.
    3. Пример

      Входной файл

                              java/info/kgeorgiy/java/advanced/walk/samples/binary
                              java/info/kgeorgiy/java/advanced/walk/samples
                          

      Выходной файл

                              8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                              050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                              2076af58 java/info/kgeorgiy/java/advanced/walk/samples/12
                              72d607bb java/info/kgeorgiy/java/advanced/walk/samples/123
                              81ee2b55 java/info/kgeorgiy/java/advanced/walk/samples/1234
                              8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                          
  3. При выполнении задания следует обратить внимание на:
    • Дизайн и обработку исключений, диагностику ошибок.
    • Программа должна корректно завершаться даже в случае ошибки.
    • Корректная работа с вводом-выводом.
    • Отсутствие утечки ресурсов.
  4. Требования к оформлению задания.
    • Проверяется исходный код задания.
    • Весь код должен находиться в пакете ru.ifmo.rain.фамилия.walk.

Тесты к домашним заданиям