Monday, September 10, 2012

Java Практика - Занятие 7

Седьмое занятие мы посвятили работе с файлами в Java. Мы рассмотрели базовые операции, такие как создание, удаление, и получение доступа к файлам и каталогам. Немного остановились на потоках, как бинарных, так и символьных, и их использовании для чтения и записи файлов. В конце занятия, я рассказал про библиотеку Apache Commons IO, в которой реализованы полезные методы для работы с файлами и потоками ввода/вывода. И, конечно, домашнее задание для закрепления материала. Про работу с файлами и потоками я рассказывал на уроке 11 из курса Java для тестировщиков, так что начинать изучение темы следует оттуда.

Для доступа к файлам в Java используются классы из пакета java.io. Для реализации высокопроизводительных операций ввода/вывода существуют также классы из пакета java.nio. Однако, их рассмотрение выходит за рамки данного курса. К тому же, я считаю, что разобраться там не составит труда после освоения традиционных способов.

Работу с файлами можно условно разделить на две составляющие. Во-первых, это операции, связанные с доступом и местоположением файлов и каталогов, такие как создание, перемещение, удаление, получение списка (у директории). Во-вторых, это операции чтения и записи содержимого файлов. Для первого случая используется базовый класс java.io.File, а также другие системные классы. Во втором случае используются потоки ввода/вывода. Стандартных системных классов Java часто бывает недостаточно для выполнения необходимых операций с файлами (например, копирование файла), и в таком случае использование сторонних библиотек выручает разработчика, чтобы не "изобретать велосипед" заново. Для работы с потоками в Java есть все, что нужно, хоть часто и приходится писать много сопутствующего кода для корректной обработки всех ситуаций. В данном случае также помогают сторонние библиотеки, предоставляющие методы, которые либо полностью выполняют нужные действия, либо избавляют от необходимости писать блоки стандартных вызовов.

Все операции ввода/вывода, а также методы создания потоков в Java выбрасывают проверяемые исключения. В обязательном порядке их необходимо отлавливать и обрабатывать. Как именно — это зависит уже от приложения, можно просто завершить работу, а можно попытаться восстановить нормальное функционирование с уведомлением пользователя. В любом случае, программист должен решить, что будет делать программа в случае возникновения ошибок ввода/вывода. Для ознакомления с исключениями можно послушать мой урок 9 из курса Java для тестировщиков.

На следующем занятии мы рассмотрим работу с двумя распространёнными типами файлов — properties и XML.

Домашнее задание для этого занятия:

  1. Написать программу, которая читает текстовый файл, состоящий из нескольких строк, и записывает эти строки в отсортированном по длине порядке в другой текстовый файл.

    Например, файл aa.txt, содержит следующие строки:
    World!
    Hello
    And how do you do?
    Созданный файл bb.txt будет содержать эти же строки в отсортированном по длине виде:
    Hello
    World!
    And how do you do?
    Для небольшого усложнения этого задания можно сделать следующее:
    • добавить возможность указывать исходный файл, целевой файл и направление сортировки (восходящая или спадающая) в командной строке, например так:
      java SortFile aa.txt bb.txt asc
      , где SortFile — класс, который мы запускаем, aa.txt — исходный файл, bb.txt — целевой файл, asc или desc — направление сортировки.

  2. Написать программу, которая копирует все файлы из заданного каталога в целевой, при этом переименовывая их в случайном порядке, назначая имена файлам из числовой последовательности от 1 до N, где N — это количество файлов в каталоге. При этом имена файлов не могут повторяться.

    Например, есть каталог, в котором хранятся файлы: a.txt b.txt c.txt Программа копирует эти файлы в другой каталог, назначая им следующие имена: 1.txt 2.txt 3.txt При этом назначение имен происходит случайным образом, т. е. например, a.txt → 2.txt, b.txt → 1.txt, c.txt → 3.txt. Для выбора случайного числа, можно использовать Java класс Random.
Ну и, собственно, видео. Прошу прощения за качество видео - в последний момент сломался мой фотоаппарат и пришлось записывать на телефоны - сначала на один (пока там место не закончилось), потом на второй. Стол, на котором были установлены телефоны, шатался, поэтому видео я обработал стабилизатором от youtube.

Post a Comment