Работа с файлами и каталогами при помощи класса File В предыдущих разделах мы рассмотрели классы, предназначенные для чтения и записи потоков. Однако часто возникает необходимость выполнения и таких операций, как определение атрибутов файла, создание или удаление каталогов, удаление файлов, получение списка всех файлов в каталоге и так далее. Для выполнения всех этих операций в приложениях Java используется класс с именем File.
У вас есть три возможности создать объект класса File, вызвав для этого один из трех конструкторов: public File(String path); public File(File dir, String name); public File(String path, String name); Первый из этих конструкторов имеет единственный параметр - ссылку на строку пути к файлу или каталогу. С помощью второго конструктора вы можете указать отдельно каталог dir и имя файла, для которого создается объект в текущем каталоге. И, наконец, третий конструктор позволяет указать полный путь к каталогу и имя файла. Если первому из перечисленных конструкторов передать ссылку со значением null, возникнет исключение NullPointerException. Пользоваться конструкторам очень просто. Вот, например, как создать объект класса File для файла c:\autoexec.bat и каталога d:\winnt: f1 = new File("c:\\autoexec.bat"); f2 = new File("d:\\winnt");
После того как вы создали объект класса File, нетрудно определить атрибуты этого объекта, воспользовавшись соответствующими методами класса File. Проверка существования файла или каталога С помощью метода exists вы можете проверить существование файла или катлога, для которого был создан объект класса File: public boolean exists(); Этот метод можно применять перед созданием потока на базе класса FileOutputStream, если вам нужно избежать случайной перезаписи существующего файла. В этом случае перед созданием выходного потока класса FileOutputStream следует создать объект класса File, указав конструктору путь к файлу, а затем проверить сущестование файла методом exists. Проверка возможности чтения и записи Методы canRead и canWrite позволяют проверить возможность чтения из файла и записи в файл, соответственно: public boolean canRead(); public boolean canWrite(); Их полезно применять перед созданием соответствующих потоков, если нужно избежать возникновение исключений, связанных с попыткой выполнения доступа неразрешенного типа. Если доступ разрешен, эти методы возвращают значение true, а если запрещен - false. Определение типа объекта - файл или каталог С помощью методов isDirectory и isFile вы можете проверить, чему соответствует созданный объект класса File - каталогу или файлу: public boolean isDirectory(); public boolean isFile(); Получение имени файла или каталога Метод getName возвращает имя файла или каталога для заданного объекта класса File (имя выделяется из пути): public String getName(); Получение абсолютного пути к каталогу Метод getAbsolutePath возвращает абсолютный путь к файлу или каталогу, который может быть машинно-зависимым: public String getAbsolutePath(); Определение типа указанного пути - абсолютный
или относительный С помощью метода isAbsolute вы можете определить, соответствует ли данный объект класса File файлу или каталогу, заданному абсолютным (полным) путем, либо относительным путем: public boolean isAbsolute(); Определение пути к файлу или каталогу Метод getPath позволяет определить машинно-независимый путь файла или каталога: public String getPath(); Определение родительского каталога Если вам нужно определить родительский каталог для объекта класса File, то это можно сделать методом getParent: public String getParent(); Определение длины файла в байтах Длину файла в байтах можно определить с помощью метода length: public long length(); Определение времени последней модификации файла
или каталога Для определения времени последней модификации файла или каталога вы можете вызвать метод lastModified: public long lastModified(); Заметим, однако, что этот метод возвращает время в относительных единицах с момента запуска системы, поэтому его удобно использовать только для относительных сравнений. Получение текстового представления объекта Метод toString возвращает текстовую строку, представляющую объект класса File: public String toString(); Получение значения хэш-кода Метод hashCode возвращает значение хэш-кода, соответствующего объекту File: public int hashCode();
Для удаления ненужного файла или каталога вы должны создать соответствующий объект File и затем вызвать метод delete: public boolean delete();
С помощью методов mkdir и mkdirs можно создавать новые каталоги: public boolean mkdir(); public boolean mkdirs(); Первый из этих методов создает один каталог, второй - все подкаталоги, ведущие к создаваемому каталогу (то есть полный путь).
Для переименования файла или каталога вы должны создать два объекта класса File, один из которых соответствует старому имени, а второй - новому. Затем для перовго из этих объектов нужно вызвать метод renameTo, указав ему в качестве параметра ссылку на второй объект: public boolean renameTo(File dest); В случае успеха метод возвращает значение true, при возникновении ошибки - false. Может также возникать исключение SecurityException.
Для сравнения объектов класса File вы должны использовать метод equals: public boolean equals(Object obj); Заметим, что этот метод сравнивает пути к файлам и каталогам, но не сами файли или каталоги.
С помощью метода list вы можете получить список содержимого каталога, соответствующего данному объекту класса File. В классе File предусмотрено два варианта этого метода - без параметра и с параметром: public String[] list(); public String[] list(FilenameFilter filter); Первый из этих методв возвращает массив строк с именами содержимого каталога, не включая текущий каталог и родительский каталог. Второй позволяет получить список не всех объектов, хранящихся в каталоге, а только тех, что удовлетворяют условиям, определенным в фильтре filter класса FilenameFilter. |