Использование API файловой системы

Модуль org.eclipse.core.filesystem предоставляет общий API для взаимодействия с произвольной файловой системой. Этот API подобен java.io.File, за исключением нескольких ключевых отличий:

В API файловой системы путь любого данного файла представлен как иерархический java.net.URI. Схема URI представляет тип файловой системы, а компонент пути URI представляет расположение файла в дереве файловой системы. Любой данный иерархический URI представляет потенциальный файл или каталог в некоторой произвольной файловой системе.

API для работы с файлами и файловыми системами находится в пакете org.eclipse.core.filesystem). Главный тип API - это IFileStore. Каждый экземпляр IFileStore представляет отдельный файл в файловой системе. Что касается IResource, существование экземпляра IFileStore не означает, что такой файл существует на диске. Можно использовать экземпляр IFileStore для создания, удаления, копирования, перемещения или открытия потоков в файлах. Для данного URI можно использовать экземпляр IFileStore с помощью статического метода EFS.getStore(URI).

Можно использовать интерфейс IFileSystem, для того чтобы найти информацию о всей файловой системе в целом. Каждый экземпляр IFileSystem представляет отдельную схему URI, например, "file:", "ftp:" и т.д. Этот тип можно использовать для того, чтобы задавать вопросы, например, какие атрибуты файла поддерживаются, или учитывается ли в файловой системе регистр. С помощью этого типа можно также получить IFileStore для данного URI.

Большая часть методов IFileStore имеют параметр флага, который позволяет предоставлять дополнительные опции. Значения флага находятся в классе EFS. Например, для того чтобы открыть выходной поток для добавления к файлу, используйте:

   IFileStore store = ...//некоторое хранилище файлов
	store.openOutputStream(EFS.APPEND, null);

Использовать поведение по умолчанию для метода можно с помощью EFS.NONE.

Интерфейс IFileInfo представляет состояние файла в определенный момент времени. В частности, можно определить, существует ли файл, является ли он каталогом, какие у него атрибуты, и т.д. Эта информация может быть изменена, а затем снова установлена в файле. Например, следующий фрагмент кода устанавливает каталогу атрибут только для чтения:

   IFileStore store = ...//некоторое хранилище файлов
   IFileInfo info = store.fetchInfo();
	if (info.exists() && info.isDirectory()) {
		info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true);
   store.putInfo(info, EFS.SET_ATTRIBUTES, null);
	}

Этот стиль API позволяет получить и изменить информацию о файле с помощью одного вызова файловой системы. В предыдущем примере есть только один вызов файловой системы для извлечения информации, после чего вы можете выполнять сколько угодно операций с объектом IFileInfo без нового обращения к диску.

Класс EFS имеет статические методы фабрики для получения экземпляров IFileStore и IFileSystem, а также различные константы опций и коды ошибок.