Назад
Вперед
7.18. Получение информации о файле
Пример показывает, как с помощью класса File
можно получить различную информацию о файле -
полный путь, размер, доступность для записи,
чтения и так далее.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
С помощью класса File вы можете выполнять такие
операции, как определение атрибутов файла,
создание или удаление каталогов, удаление
файлов, получение списка всех файлов в каталоге и
так далее.
В классе File предусмотрены три конструктора:
public File(String path);
public File(File dir, String name);
public File(String path, String name);
Первый из них имеет единственный параметр -
ссылку на строку пути к файлу или каталогу. С
помощью второго конструктора вы можете указать
отдельно каталог dir и имя файла, для которого
создается объект в текущем каталоге. И, наконец,
третий конструктор позволяет указать полный
путь к каталогу и имя файла.
После того как вы создали объект класса File,
нетрудно определить атрибуты этого объекта,
воспользовавшись соответствующими методами
класса File.
С помощью метода exists вы можете проверить
существование файла или каталога, для которого
был создан объект класса File:
public boolean 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();
Метод getPath позволяет определить
машинно-независимый путь файла или каталога:
public String getPath();
Если вам нужно определить родительский каталог
для объекта класса File, то это можно сделать
методом getParent:
public String getParent();
Длину файла в байтах можно определить с помощью
метода length:
public long length();
Описание примера
Автономное приложение FileInfo показывает в своем
окне информацию о файлах, полученную средствами
класса File (рис. 1).
Рис. 1. Просмотр информации о файле
Как работает приложение?
Если выбрать в меню File строку Open, на экране
появится стандартная диалоговая панель выбора
входного файла с названием Select File.
Она будет создана и отображена методом
actionPerformed, получающем управление при выборе строк
меню нашего приложения:
fdlg = new FileDialog(this, "Select file",
FileDialog.LOAD);
fdlg.show();
Если пользователь отказался от выбора файла,
метод возвращает управление, не предпринимая
никаких действий:
if(fdlg.getFile() == null)
return;
В том случае если файл был выбран, метод
actionPerformed создает для него объект класса File:
File f = new File(fdlg.getDirectory(),
fdlg.getFile());
При этом он передает конструктору класса File
через первый параметр путь к каталогу,
содержащему файл, а через второй - имя файла.
Все дальнейшие действия выполняются только
после проверки существования указанного файла,
которая выполняется методом exist:
if(f.exists())
{
. . .
}
Информация о существующем файле добавляется в
виде текстовых строк в окно многострочного
редактора текста ta.
Прежде всего мы добавляем туда абсолютный путь
к файлу, полученный методом getAbsolutePath,
канонизированный путь к файлу, определенный
методом getCanonicalPath и машинно-независимый путь,
представляющий данный объект (полученный
методом getPath):
ta.append("Absolute path: " +
f.getAbsolutePath() + "\n");
try
{
ta.append("Canonical path: " +
f.getCanonicalPath() + "\n");
}
catch(IOException ex) {}
ta.append("Path: " +
f.getPath() + "\n");
В нашем примере (рис. 1) эти пути совпадают,
однако такое совпадение получается не всегда. В
частности, канонический путь может зависеть от
платформы, на которой выполняется приложение.
Далее наша программа определяет имя файла
(методом getName), имя каталога, где этот файл
расположен (методом getParent), и длину файла в байтах
(методом length):
ta.append("Name: " +
f.getName() + "\n");
ta.append("Parent: " +
f.getParent() + "\n");
ta.append("Lenth: " +
f.length() + " bytes\n");
Далее мы проверяем, разрешается ли чтение
файла:
if(f.canRead())
{
ta.append("Can read from file\n");
}
Если разрешается, в окно редактора текста
добавляется соответствующая строка.
Аналогичная проверка выполняется и для записи:
if(f.canWrite())
{
ta.append("Can write to file\n");
}
Назад Вперед |