Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Выбор файлов
Простейший редактор текста
Копирование файлов UNICODE
Сохранение объекта Java в файле
Произвольные классы и файлы
Буферизация потоков
Разбор конфигура-
ционного файла

Работа с консолью
Работа с классом PrintWriter
Разбор строк класса String
Загрузка и просмотр изображений
Потоки в оперативной памяти
Конвейерные потоки
Комбинирование двух потоков
Комбинирование нескольких потоков
Поиск слова в текстовом файле
Произвольный доступ к файлу
Информация о файле
Работа с каталогами
Просмотр содержимого каталога
Просмотр каталога с фильтром
Панель для выбора каталога
Список системных свойств
Сохранение списка системных свойств
Контрольная сумма файла
Копирование, переименование, удаление файлов
Архивы ZIP
Создание архива ZIP
Распаковка архива ZIP
Обход дерева каталогов

Назад Вперед

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).

pic1.gif (5594 bytes)

Рис. 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"); 
} 

Назад Вперед

[Назад]