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

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

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

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

Назад Вперед

7.19. Работа с каталогами

Пример показывает, как с помощью класса File можно выполнять основные операции с каталогами - создание, переименование, удаление. В примере также используются методы, позволяющие получать информацию о среде выполнения приложения Java, в том числе путь к рабочему каталогу, строка разделителя и так далее.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

С помощью класса File вы можете создавать, переименовывать или удалять файлы и каталоги.

Для удаления ненужного файла или каталога вы должны создать соответствующий объект 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);

Заметим, что этот метод сравнивает пути к файлам и каталогам, но не сами файлы или каталоги.

В классе System определены методы, предназначенные для работы с системными свойствами, оформленными в класс Properties. Метод getProperties позволяет извлечь свойства для анализа:

Properties p = System.getProperties();

Каждое свойство имеет ключ и значение:

Ключ Значение
java.version Версия Java
java.vendor Строка, идентифицирующая изготовителя виртуальной машины Java
java.vendor.url Адрес URL изготовителя виртуальной машины Java
java.home Каталог, в который установлена система Java
java.class.version Версия библиотеки классов Java
java.class.path Путь к библиотеке классов Java
os.name Название операционной системы
os.arch Архитектура операционной системы
os.version Версия операционной системы
file.separator Разделитель файлов
path.separator Разделитель пути
line.separator Разделитель строк
user.name Имя пользователя
user.home Домашний каталог пользователя
user.dir Текущий рабочий каталог пользователя

При работе с каталогами и файлами нас будут интересовать главным образом ключи user.home, user.dir, file.separator, path.separator и line.separator.

Чтобы извлечь значение по ключу вы можете воспользоваться методом getProperty, определенным в классе Properties, например:

String s = p.getProperty("user.dir");

Здесь мы получаем путь к текущему каталогу в виде текстовой строки класса String.

Описание примера

Наше автономное приложение DirControl выполняет несколько операций над каталогами, созданными в рабочем каталоге. Но перед этим приложение получает набор системных свойств в виде объекта класса Properties и отображает значения некоторых ключей на консоли:

* Directory control demonstration

Work dir: E:\Java-WorkShop20\JWS\
intel-win32\bin
Home dir: E:\
Separator: \
Path separator: ;

Так как во время операций с свойствами и каталогами возможно возникновение исключений, мы выполняем их в блоке try-catch.

Системные свойства получаются следующим образом:

Properties p = System.getProperties();

Далее мы отображаем на консоли значения для некоторых ключей:

System.out.println("Work dir: " +
  p.getProperty("user.dir"));
        
System.out.println("Home dir: " +
  p.getProperty("user.home"));
        
System.out.println("Separator: " +
  p.getProperty("file.separator"));
        
System.out.println("Path separator: " +
  p.getProperty("path.separator"));

После этого программа пытается создать в текущем рабочем каталоге новый каталог с именем temp.dir. Для этого она образует новый объект f класса File:

File f = new File(
  "temp.dir" + File.separator);

Каталог затем создается методом mkdir:

f.mkdir();

На следующем этапе наша программа переименовывает только что созданный каталог:

File f1 = new File("newtemp.dir" + 
  File.separator);
f.renameTo(f1);

Здесь вначале создается объект f1 класса File, соответствующий новому имени, а затем для объекта f вызывается метод renameTo.

Чтобы образовать два вложенных каталога, мы создаем соответствующий объект f2 класса File и вызываем для него метод mkdirs:

File f2 = new File("1.dir" + 
  File.separator + "2.dir" + 
  File.separator);
f2.mkdirs();

Перед тем как завершить свою работу, наша программа удаляет созданные ей каталоги.

Переименованный каталог newtemp.dir удаляется очень просто:

f1.delete();

Что же касается вложенных каталогов, то мы вначале удаляем каталог 2.dir, а затем каталог 1.dir:

f2.delete();
      
File f3 = new File("1.dir" + 
  File.separator);
        
f3.delete();

Мы не можем удалить каталог 1.dir за один прием, так как он не пустой - в нем находится каталог 2.dir. Поэтому мы вначале удалили каталог 2.dir, а затем - каталог 1.dir.

Для удаления каталога 1.dir после удаления вложенного в него каталога 2.dir нам пришлось создать отдельный объект f3 класса File.


Назад Вперед

[Назад]