Чтение онлайн

на главную - закладки

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

br.close;

}

catch(Exception e) {

e.printStackTrace;

}

Пример 15.15.

Классы-мосты InputStreamReader и OutputStreamWriter при преобразовании символов также используют некоторую кодировку. Ее можно задать, передав в конструктор в качестве аргумента ее название. Если оно не будет соответствовать никакой из известных кодировок, будет брошено исключение UnsupportedEncodingException. Вот некоторые из корректных значений этого аргумента (чувствительного к регистру!) для распространенных кодировок: "Cp1251", "UTF-8", "8859_1"

и т.д.

Класс StreamTokenizer

Экземпляр StreamTokenizer создается поверх существующего объекта, либо InputStream, либо Reader. Как и java.util.StringTokenizer, этот класс позволяет разбивать данные на лексемы (token), выделяемые из потока по определенным свойствам. Поскольку работа ведется со словами, конструктор, принимающий InputStream, объявлен как deprecated (предлагается оборачивать байтовый поток классом InputStreamReader и вызывать второй конструктор). Общий принцип работы такой же, как и у StringTokenizer, – задаются параметры разбиения, после чего вызывается метод nextToken, пока не будет достигнут конец потока. Способы задания разбиения у StreamTokenizer довольно разнообразны, но просты, и поэтому здесь не рассматриваются.

Работа с файловой системой

Класс File

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

Объект класса File является абстрактным представлением файла и пути к нему. Он устанавливает только соответствие с ним, при этом для создания объекта неважно, существует ли такой файл на диске. После создания можно выполнить проверку, вызвав метод exists, который возвращает значение true, если файл существует. Создание или удаление объекта класса File никоим образом не отображается на реальных файлах. Для работы с содержимым файла можно получить экземпляры FileI/OStream.

Объект File может указывать на каталог (узнать это можно путем вызова метода isDirectory ). Метод list возвращает список имен (массив String ) содержащихся в нем файлов (если объект File не указывает на каталог – будет возвращен null ).

Следующий пример демонстрирует использование объектов класса File:

import java.io.*;

public class FileDemo {

public static void findFiles(File file, FileFilter filter,

PrintStream output) throws IOException {

if (file.isDirectory) {

File[] list = file.listFiles;

for (int i=list.length; --i>=0;) {

findFiles(list[i], filter, output);

}

} else {

if (filter.accept(file))

output.println("\t" + file.getCanonicalPath);

}

}

public static void main(String[] args) {

class NameFilter implements FileFilter {

private String mask; NameFilter(String mask) {

this.mask = mask;

}

public boolean accept(File file) {

return (file.getName.indexOf(mask)!=-1)?true:false;

}

}

File pathFile = new File(".");

String filterString = ".java"; try {

FileFilter filter = new NameFilter(filterString);

findFiles(pathFile, filter, System.out);

}

catch(Exception e) {

e.printStackTrace;

}

System.out.println("work finished");

}

}

Пример 15.16.

При выполнении этой программы на экран будут выведены названия (в каноническом виде) всех файлов, с расширением .java, содержащихся в текущем каталоге и всех его подкаталогах.

Для определения того, что файл имеет расширение .java, использовался интерфейс FileFilter с реализацией в виде внутреннего класса NameFilter. Интерфейс FileFilter определяет только один метод accept, возвращающий значение, определяющее, попадает ли переданный файл в условия фильтрации. Помимо этого интерфейса, существует еще одна разновидность интерфейса фильтра – FilenameFilter, где метод accept определен несколько иначе: он принимает не объект файла к проверке, а объект File, указывающий на каталог, где находится файл для проверки, и строку его названия. Для проверки совпадения, с учетом регулярных выражений, нужно соответствующим образом реализовать метод accept. В конкретном приведенном примере можно было обойтись и без использования интерфейсов FileFilter или FilenameFilter. На практике их можно использовать для вызова методов list объектов File – в этих случаях будут возвращены файлы с учетом фильтра.

Также класс File предоставляет возможность получения некоторой информации о файле.

* Методы canRead и canWrite – возвращается boolean значение, можно ли будет приложению производить чтение и изменение содержимого из файла, соответственно.

* getName – возвращает строку – имя файла (или каталога).

* getParent, getParentName – возвращают каталог, где файл находится в виде объекта и строки названия File, соответственно.

* getPath – возвращает путь к файлу (при этом в строку преобразуется абстрактный путь, на который указывает объект File ).

* isAbsolutely – возвращает boolean значение, является ли абсолютным путь, которым указан файл. Определение, является ли путь абсолютным, зависит от системы, где запущена Java-машина. Так, для Windows абсолютный путь начинается с указания диска, либо символом '\'. Для Unix абсолютный путь начинается символом '/'.

* isDirectory, isFile – возвращает boolean значение, указывает ли объект на каталог либо файл, соответственно.

* isHidden – возвращает boolean значение, указывает ли объект на скрытый файл.

* lastModified – дата последнего изменения.

* length – длина файла в байтах.

Также можно изменить некоторые свойства файла – методы setReadOnly, setLastModified, назначение которых очевидно из названия. Если нужно создать файл на диске, это позволяют сделать методы createNewFile, mkDir, mkDirs. Соответственно, createNewFile создает пустой файл (если таковой еще не существует), mkDir создает каталог, если для него все родительские уже существуют, а mkDirs создаст каталог вместе со всеми необходимыми родительскими.

Поделиться:
Популярные книги

Мажор. Дилогия.

Соколов Вячеслав Иванович
Фантастика:
боевая фантастика
8.05
рейтинг книги
Мажор. Дилогия.

Космос – место что надо (Жизни и эпохи Сан Ра)

Швед Джон Ф.
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Космос – место что надо (Жизни и эпохи Сан Ра)

Константин Коровин вспоминает…

Зильберштейн Илья Самойлович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Константин Коровин вспоминает…

Иммунитет Вселенной (Путь Знахаря)

Утолин Константин Владимирович
Фантастика:
научная фантастика
5.00
рейтинг книги
Иммунитет Вселенной (Путь Знахаря)

И тогда мы скоро полетим на Марс, если только нам это будет нужно

Павлов Алексей Андреевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
И тогда мы скоро полетим на Марс, если только нам это будет нужно

Красная книга ВЧК. В двух томах. Том 2

Велидов А. С.
Научно-образовательная:
история
6.25
рейтинг книги
Красная книга ВЧК. В двух томах. Том 2

Танец убийц

Фагиаш Мария
Проза:
историческая проза
5.00
рейтинг книги
Танец убийц

Красные звезды. Полная трилогия

Березин Федор Дмитриевич
Красные звезды
Фантастика:
альтернативная история
5.70
рейтинг книги
Красные звезды. Полная трилогия

Старик

Иванин Александр
Эпоха мертвых
Фантастика:
боевая фантастика
постапокалипсис
7.32
рейтинг книги
Старик

Кенди

Неизвестен 3 Автор
Детские:
прочая детская литература
5.00
рейтинг книги
Кенди

Война и наказание: Как Россия уничтожала Украину

Зыгарь Михаил Викторович
Документальная литература:
прочая документальная литература
публицистика
5.00
рейтинг книги
Война и наказание: Как Россия уничтожала Украину

Стихотворения и поэмы (основное собрание)

Бродский Иосиф Александрович
Поэзия:
поэзия
5.00
рейтинг книги
Стихотворения и поэмы (основное собрание)

Рейд к звездам

Ван Вогт Альфред Элтон
Фантастика:
научная фантастика
5.00
рейтинг книги
Рейд к звездам

Акелдама - кровавое поле битвы. Книга 3. Часть 2

Вихрева Елена
3. Акелдама - кровавое поле битвы
Фантастика:
фэнтези
8.00
рейтинг книги
Акелдама - кровавое поле битвы. Книга 3. Часть 2