Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
139
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

11.19. Интерфейс FilenameFilter

Интерфейс FilenameFilter позволяет создавать объекты, которые фильтруют списки файлов и удаляют из них ненужные. Он содержит всего один метод:

boolean accept(File dir, String name)

Возвращает true, если файл с именем name в каталоге dir должен входить в отфильтрованный список.

В следующем примере объект FilenameFilter используется для того, чтобы в список включались только каталоги:

import java.io.*;

class DirFilter implements FilenameFilter {

public boolean accept(File dir, String name) {

return new File(dir, name).isDirectory();

}

public static void main(String[] args) {

File dir = new File(args[0]);

String[] files = dir.list(new DirFilter());

System.out.println(files.length + "dir(s):");

for (int i = 0; i << files.length; i++)

System.out.println("\t" + files[i]);

}

}

Сначала мы создаем объект File, который представляет собой каталог, указанный в командной строке. Затем мы конструируем объект DirFilter и передаем его в качестве параметра методу list. Для каждого имени, входящего в каталог, list вызывает метод accept объекта-фильтра и включает имя в список лишь в том случае, если объект-фильтр возвращает true. Для нашего метода accept значение true показывает, что имя соответствует каталогу.

Упражнение 11.10

С помощью интерфейса FilenameFilter напишите программу, которая получает в качестве параметров имя каталога и расширение файла и выводит список всех файлов каталога с заданным расширением.

11.20. Классы ioException

Для сообщений обо всех ошибках ввода/вывода, обнаруженных классами пакета java.io, должны использоваться исключения, являющиеся подклассом IOException. Большинство классов проектировалось для целей общего назначения, так что основная часть исключений также носит универсальныйхарактер. Например, методы класса InputStream, возбуждающие IOException, не могут заранее предсказать, какие именно возникнут исключения, так как каждый конкретный потоковый класс может возбудить некоторый подкласс IOException, сигнализируя тем самым об ошибке, относящейся лишь к этому потоку. Например, фильтрующие входные и выходные потоки лишь передают без обработки исключения от объектов, на основе которых они создавались и которые могут представлять собой потоки любого типа.

В пакете java.io используются четыре подкласса IOException:

EOFException extends IOException

Возбуждается интерфейсами потоков данных при достижении конца ввода, как запланированном, так и неожиданном.

FileNotFoundException extends IOException

Возбуждается конструкторами файловых потоков, если файл, имя которого передается в качестве параметра, не найден.

InterruptedIOException extends IOException

Возбуждается любым потоком, когда в операцию ввода/вывода вмешивается прерывание программного потока (см. раздел “Прерывание потока”). Фактически операции ввода/вывода переводят исключение InterruptedException в InterruptedIO Exception.

UTFDataFormatException extends IOException

Возбуждается методом DataInputStream.readUTF, если считываемая строка имеет неверный синтаксис UTF.

Если не считать этих конкретных исключений, то для сообщений обо всех особых состояниях в java.io используется исключение IOException, содержащее строку с описанием конкретной ошибки— например, использование несоединенного конвейерного потока или попытка отката на несколько символов назад в потоке PushbackInputStream.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]