Назад
Вперед
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.
Назад Вперед |