Пример: проверка пароля, введённого пользователем.
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(”Имя папки”,”Имя файла”).
При этом имена могут быть как короткими (локальными), без указания пути к файлу или папке, так и длинными (абсолютными), с указанием пути. В приведённой далее таблице файлы (папки) ищутся по имени в соответствии с правилами поиска файлов в операционной системе. Для платформы 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® – корневые папки всех возможных дисков. |
Пример работы с файловыми объектами: