Смекни!
smekni.com

Общие представления о языке Java 5 (стр. 50 из 68)

Пример: проверка пароля, введённого пользователем.

class CheckPasswordDemo{

private String password=””;

public String getPassword(){

return password;

};

public void setPassword()(){

...//реализация метода

};

public void checkPassword(String pass)

throws WrongPasswordException {

if(!pass.equals(password))

throw new WrongPasswordException();

};

}

При вызове метода checkPassword в случае неправильного пароля, переданного в качестве параметра, возбуждается исключительная ситуация. Следует обратить внимание, что сравнение pass!=password всегда будет давать true, так как строки сравниваются как объекты. То есть при сравнении “==” проверяется идентичность адресов в памяти, а не содержание строк.

Ещё один момент, на котором следует остановиться: не используйте возбуждение исключительных ситуаций для нормального режима функционирования программы! Не используйте его вместо блока else в операторе if! Возбуждение исключения выполняется намного дольше, потребляет много ресурсов и при неудачном использовании только ухудшает программу. Например, в нашем случае имело бы смысл при неправильном вводе пароля предусмотреть возможность ещё двух попыток ввода в обычном режиме – и только после третьей неудачной попытки возбуждать исключение.

Работа с файлами и папками

Концепция работы с файлами в Java включает две составляющие:

  • Работа с файлами и папками с помощью объектов типа File.

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

  • Работа потоками ввода-вывода.

Обеспечивает работу не только с файлами, но и с памятью, а также различными устройствами ввода-вывода.

Работа с файлами и папками с помощью объектов типа File

Объекты типа File могут рассматриваться как абстракции, инкапсулирующие работу с именами файлов и папок. При этом папка рассматривается как разновидность файла, обладающая особыми атрибутами.

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

File(”Имя папки”)

File(”Имя файла”)

File(”Имя папки”,”Имя файла”).

При этом имена могут быть как короткими (локальными), без указания пути к файлу или папке, так и длинными (абсолютными), с указанием пути. В приведённой далее таблице файлы (папки) ищутся по имени в соответствии с правилами поиска файлов в операционной системе. Для платформы Windows® вместо символа ”\” в строках, соответствующих путям, должна использоваться последовательность ”\”.

Важнейшие файловые операции, инкапсулированные классом File:

Поле или метод Что содержит или делает
Переменные класса
String pathSeparator Содержит строку с символом разделителя пути в операционной системе. Это ”/” в Unix-подобных системах и ”\” в Windows®.
char pathSeparatorChar Содержит символ разделителя пути в операционной системе. Это ’/’ в Unix-подобных системах и ’\’ в Windows®.
String separator Содержит строку с символом разделителя между именами файлов и файловых масок в операционной системе.
char separatorChar Содержит символ разделителя между именами файлов и файловых масок в операционной системе.
Проверка параметров файла или папки
boolean exists() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует. Иначе false.
long length() Возвращает длину файла в байтах в случае, когда файл с заданным в конструкторе именем существует и не является папкой. Иначе 0L.
boolean canRead() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует и доступен по чтению. Иначе false. (В Unix-подобных системах существуют файлы, доступные только по записи). Может возбуждать SecurityException.
boolean setReadOnly() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует, и ему удалось установить статус “доступен только по чтению”. Иначе false.
boolean canWrite() Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует и доступен по записи. Иначе false. (В операционных системах существуют файлы, доступные только по чтению). Может возбуждать SecurityException.
boolean isDirectory() Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является папкой. Иначе false.
boolean isFile() Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является файлом. Иначе false.
boolean isHidden() Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является скрытым. Иначе false. В Unix-образных системах скрытыми являются файлы, имена которых начинаются с точки. В Windows® – те, которые имеют атрибут “hidden” (“скрытый”).
long lastModified() Возвращает время последней модификации файла, если он существует и доступен по чтению. Иначе 0L. Время отсчитывается в миллисекундах, прошедших с 0 часов 1 января 1970 года (по Гринвичу).
boolean setLastModified(long time) Устанавливает время последней модификации файла. Возвращает true, если он существует и доступен по записи. Иначе false. Время отсчитывается в миллисекундах, прошедших с 0 часов 1 января 1970 года (по Гринвичу).
Путь и имя файла (папки)
String getName() Возвращает короткое имя файла или папки.
String getParent() Возвращает абсолютное имя родительской папки – то есть папки, в которой находится файл (или папка), соответствующий файловому объекту.
String getAbsolutePath() Возвращает абсолютный путь к файлу или папке, включая имя файла. При этом если в имени файла в конструкторе была задана относительная адресация, соответствующая часть пути сохраняется в возвращаемой строке.
String getCanonicalPath() Возвращает абсолютный путь к файлу или папке, включая имя файла. При этом если в имени файла в конструкторе была задана относительная адресация, соответствующая часть пути заменяется в возвращаемой строке на канонический вариант адресации – без элементов относительной адресации. Возбуждает IOException, если канонический путь не может быть построен.
int compareTo(File f) Сравнение имён файлов (папок), сопоставляемых текущему файловому объекту и объекту f. Возвращает 0 в случае, когда абсолютные имена файлов (папок) совпадают. Иначе возвращает число, зависящее от разницы в длинах имён и кодов составляющих их символов. Сравнение зависимо от операционной системы – в Unix-образных системах регистр символов имеет значение, в Windows® – не имеет. Соответствие понимается абстрактно на уровне имён и путей – самих файлов может не существовать.
boolean isAbsolute() Возвращает true в случае, когда адресация к имени файла (папки) текущего файлового объекта является абсолютной. Хотя может содержать элементы относительной адресации, то есть не быть канонической.
boolean equals(Object obj) Возвращает true тогда и только тогда, когда текущий объект и параметр obj соответствуют одному и тому же файлу (папке) . С учётом правил о путях и регистрах символов, задаваемых операционной системой. Соответствие понимается абстрактно на уровне имён и путей – самих файлов может не существовать.
Создание/уничтожение/переименование файлов и папок
boolean createNewFile() Попытка создания файла или папки по имени, которое было задано в конструкторе объекта. В случае успеха возвращается true, иначе false. Возбуждает IOException, если файл не может быть создан (например, уже существует).
File createTempFile(String prefix, String suffix) File createTempFile(String prefix, String suffix, File folder) Метод класса. Обеспечивает создание пустого файла (или папки), задаваемого коротким именем prefix+suffix в папке операционной системы, предназначенной для временных файлов. Возвращает ссылку на объект. Префикс должен быть не менее 3 символов. Возбуждает IOException, если файл не может быть создан (например, уже существует).
boolean mkdir() Попытка создания папки по имени, которое было задано в конструкторе объекта. Возвращает true в случае успешного создания и false в других случаях.
boolean mkdirs() Попытка создания папки по имени, которое было задано в конструкторе объекта, причём заодно создаются все папки, заданные в пути, если они не существовали. Возвращает true в случае успешного создания и false в других случаях.
boolean delete() Попытка удаления файла или папки по имени, которое было задано в конструкторе объекта. Возвращает true в случае успешного удаления и false в других случаях.
boolean renameTo(File dest) Попытка переименования файла или папки с имени, которое было задано в конструкторе объекта, на новое, задаваемое параметром dest. Возвращает true в случае успешного переименования и false в других случаях.
Создание нового файлового объекта с помощью имеющегося
File getAbsoluteFile() Создание нового файлового объекта по абсолютному пути, соответствующему текущему файловому объекту.
File getCanonicalFile() Создание нового файлового объекта по каноническому пути, соответствующему текущему файловому объекту. Возбуждает IOException, если канонический путь не может быть построен.
File getParentFile() Создание нового файлового объекта по абсолютному пути, соответствующему родительской папке для текущего файлового объекта.
Списки папок и файлов
String[] list() String[] list(FilenameFilter filter) Возвращает массив строк (список) коротких имён находящихся в папке файлов и папок. Имена элементов, находящихся во вложенных папках, не показываются. Если файловый объект не соответствует существующей папке, возвращает null. При наличии фильтра возвращаются только те имена, которые соответствуют маске фильтра.
File[] listFiles() File[] listFiles(FilenameFilter filter) Возвращает массив файловых объектов, соответствующих находящимся в папке файлов и папок. Элементы, находящиеся во вложенных папках, не учитываются. Если текущий файловый объект не соответствует существующей папке, возвращает null. При наличии фильтра возвращаются объекты только для тех имён, которые соответствуют маске фильтра.
File[] listRoots() Возвращает массив файловых объектов, соответствующих возможным на данном компьютере корневым папкам. В Unix это папка “/”, в Windows® – корневые папки всех возможных дисков.

Пример работы с файловыми объектами: