BERDAFLEX Software Systems
Главная > Eclipse > Книги > Eclipse RCP. Файловый менеджер

5. Виртуальная файловая система Apache Commons VFS

ВебвизорДля упрощения работы и гибкой возможности расширения функциональных возможностей файлового менеджера, не будем ограничиваться прямым доступом к файлам операционной системы. Чтобы унифицировать доступ к файловым ресурсам воспользуемся готовыми библиотеками свободного проекта виртуальной файловой системы Apache Commons Virtual File System (VFS). Целью данного проекта является создание единого интерфейса (application programming interface (API)) для доступа к файловым ресурсам независимо будь то файлы на локальных дисках, на ftp серверах или содержимое архивов, например ZIP.

5.1. Поддерживаемые файловые системы

Текущая реализация Apache Commons VFS включает поддержку нескольких типов файловых систем, и позволяет создавать собственные реализации с возможностью автоматического подключения. Все ресурсы идентифицируются при помощи единообразного идентификатора ресурсов (Uniform Resource Identifier (URI)). URI позволяют описывать, как абсолютные, (пример: http://www.berdaflex.com), так и относительные (пример: ../images/logo.png) ресурсы. Тип ресурса определяется на основе содержимого URI.

Рисунок 4.17. Упрощенная UML диаграмма классов поддерживаемых файловых систем


5.1.1. Локальные файлы

Позволяет осуществлять доступ к локальным файлам файловой системы текущей операционной системы (ОС).

Формат URI

[file://] абсолютный путь

Где “ абсолютный путь ” представляет собой допустимый путь к файлам текущей ОС в соответствии с универсальным соглашением об именовании ресурсов (Universal Naming Convention (UNC)).

Примеры

file:///home/someuser/somedir 
file://C:/Documents and Settings 
c:/program files 

5.1.2. Архивы Zip, Jar и Tar

Позволяет осуществлять (только чтение) доступ к содержимому архивов данных типов.

Формат URI

Тип_архива:// arch-file-uri[! абсолютный путь] 

Где " Тип_архива " может быть (zip, jar, tar, tgz, tbz2), а arch-file-uri указывает на файлы поддерживаемых типов.

При необходимости использовать символ “!” нужно указывать код %21. Архивы tgz и tbz2 могут прописываться как tar:gz и tar:bz2 соответственно.

Примеры

jar:../lib/classes.jar!/META-INF/manifest.mf
zip:http://somehost/downloads/somefile.zip 
tgz:file://anyhost/dir/mytar.tgz!/somepath/somefile 

5.1.3. Архивы gzip и bzip2

Позволяет осуществлять (только чтение) доступ к содержимому архивов данных типов.

Формат URI

Тип_архива:// compressed-file-uri

Где " Тип_архива " может быть (gz, bz2), а " compressed-file-uri " указывает на файлы поддерживаемых типов.

Пример

gz:/my/gz/file.gz 

5.1.4. HTTP и HTTPS

Позволяет осуществлять доступ к файлам HTTP сервера, по обычному или защищенному протоколу.

Формат URI

http://[ username[: password]@] hostname[: port][ absolute-path]
https://[ username[: password]@] hostname[: port][ absolute-path]

Примеры

http://www.berdaflex.com/ru/default.html
https://sourceforge.net/projects/filearranger

5.1.5. FTP и SFTP

Позволяет осуществлять доступ к файлам FTP сервера, по обычному или защищенному протоколу (SSH или SCP).

Формат URI

ftp://[ username[: password]@] hostname[: port][ absolute-path] 
sftp://[ username[: password]@] hostname[: port][ absolute-path]

Примеры

ftp://berdachuk:123@ berdaflex.com/downloads/filearranger.zip 
sftp://berdachuk:123@berdaflex.com/downloads/filearranger.zip

5.1.6. WebDAV

Позволяет осуществлять доступ к файлам WebDAV сервера.

Формат URI

webdav://[ username[: password]@] hostname[: port][ absolute-path] 

Пример

webdav://somehost:8080/dist 

5.1.7. CIFS

Позволяет осуществлять доступ к файлам CIFS сервера, например Samba сервер, или Windows share.

Формат URI

smb://[ username[: password]@] hostname[: port][ absolute-path]

Пример

smb://somehost/home

5.1.8. Временные файлы

Позволяет осуществлять доступ к временным файлам ОС, которые удаляются после работы с Commons VFS.

Формат URI

tmp://[ absolute-path] 

Пример

tmp://dir/somefile.txt 

5.1.9. res

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

Формат URI

res://[ path] 

Пример

res:path/in/classpath/image.png
может заменить например:
jar:file://my/path/to/images.jar!/path/in/classpath/image.png

5.1.10. ram

Позволяет осуществлять доступ к виртуальной файловой системе в оперативной памяти.

Обычно используется для временных файлов при выполнении многоступенчатых операций.

Формат URI

ram://[ path] 

Пример

ram:///any/path/to/file.txt

5.2. Основы работы с VFS

Проще всего получить доступ к менеджеру VFS через статический метод VFS.getManager(), а с помощью VFS менеджера можно получить доступ непосредственно к файловым объектам, например:

//Печать содержимого каталога пользователя
FileSystemManager fsManager = VFS.getManager();
FileObject file = fsManager.resolveFile(System.getProperty("user.dir"));
FileObject[] children = jarFile.getChildren();
for ( int i = 0; i < children.length; i++ )
{
    System.out.print( children[i].getName().getBaseName() );
    FileContent content = children[i].getContent();
    System.out.print(" Size: " + content.getSize() + " bytes.");
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    String lastMod = dateFormat.format(new Date(content.getLastModifiedTime()));
    System.out.println("Last modified: " + lastMod);
}

5.3. Аутентификация пользователя

При работе с некоторыми ресурсами (например, ftp) требуется аутентификация пользователя.

Используя UserAutentificator можно скрыть передаваемый в адресе пароль, например:

StaticUserAuthenticator auth =
  new StaticUserAuthenticator("berdachuk", "password", null);
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
FileObject fo =
  VFS.getManager().resolveFile("ftp://filearranger.com/downloads", opts);

5.4. Рекомендуемые ресурсы

Сайт проекта Apache Commons VFS: http://jakarta.apache.org/commons/vfs

Rambler's Top100 Рейтинг@Mail.ru