Класс FileSystems
- java.lang.Object
-
- java.nio.file.FileSystems
public final class FileSystems extends Object
Методы-фабрики для файловых систем. Этот класс определяет метод getDefault для получения стандартной файловой системы и методы-фабрики для построения других типов файловых систем.
Первое обращение к любому из методов, определённых в этом классе, приводит к загрузке стандартного provider. Стандартный провайдер, идентифицируемый схемой URI "file", создаёт FileSystem, который предоставляет доступ к файловым системам, доступным для виртуальной машины Java. Если процесс загрузки или инициализации стандартного провайдера завершается ошибкой, генерируется неопределённая ошибка.
Первое обращение к методу installedProviders (через вызов любого из
newFileSystem методов, определённых в этом классе), находит и загружает все установленные провайдеры файловых систем. Установленные провайдеры загружаются с помощью механизма загрузки поставщиков услуг, определённого классом ServiceLoader. Установленные провайдеры загружаются с помощью системного загрузчика классов. Если системный загрузчик классов не найден, используется загрузчик классов платформы. Обычно провайдеры устанавливаются, размещая их в JAR-файле на пути к классам приложения. JAR-файл содержит файл конфигурации провайдера, названный java.nio.file.spi.FileSystemProvider в каталоге ресурсов META-INF/services. В этом файле перечислены один или несколько полных квалифицированных имён конкретных подклассов FileSystemProvider, у которых есть конструктор без аргументов. Порядок поиска установленных провайдеров зависит от реализации. Если провайдер инициализирован, и его метод getScheme возвращает ту же схему URI, что и у провайдера, который был инициализирован ранее, то последний инициализированный дубликат отбрасывается. Схемы URI сравниваются без учёта регистра. Во время создания провайдер может безопасно обращаться к файлам, связанным со стандартным провайдером, но необходимо позаботиться о предотвращении циклической загрузки других установленных провайдеров. Если обнаружена циклическая загрузка установленных провайдеров, генерируется неопределённая ошибка.
Этот класс также определяет методы-фабрики, которые позволяют указать ClassLoader при поиске провайдера. Как и в случае с установленными провайдерами, классы провайдеров определяются путём размещения файла конфигурации провайдера в каталоге ресурсов META-INF/services.
Если один поток начинает загрузку установленных провайдеров файловых систем, а другой поток вызывает метод, который также пытается загрузить провайдеров, то метод будет заблокирован до завершения загрузки.
- Since:
- 1.7
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static FileSystem | getDefault() | Возвращает стандартную |
static FileSystem | getFileSystem(URI uri) | Возвращает ссылку на существующую |
static FileSystem | newFileSystem(URI uri,
Map<String,?> env) | Создаёт новую файловую систему, идентифицируемую |
static FileSystem | newFileSystem(URI uri,
Map<String,?> env,
ClassLoader loader) | Создаёт новую файловую систему, идентифицируемую |
static FileSystem | newFileSystem(Path path,
ClassLoader loader) | Создаёт новую |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы
getDefault
public static FileSystem getDefault()
Возвращает стандартную FileSystem. Стандартная файловая система создает объекты, предоставляющие доступ к файловым системам, доступным для виртуальной машины Java. Рабочий каталог файловой системы — текущий пользовательский каталог, имя которого задано системной переменной user.dir. Это позволяет обеспечить взаимодействие с классом java.io.File.
Первое обращение к любому из методов, определённых в этом классе, находит стандартный объект provider. Если системная переменная java.nio.file.spi.DefaultFileSystemProvider не определена, стандартный поставщик — это системный поставщик по умолчанию, который вызывается для создания стандартной файловой системы.
Если системная переменная java.nio.file.spi.DefaultFileSystemProvider определена, она рассматривается как список одного или нескольких полных квалифицированных имён конкретных классов поставщиков, идентифицированных схемой URI "file". Если свойство содержит список более чем одного имени, имена разделяются запятой. Каждый класс загружается с помощью системного загрузчика классов и создаётся путём вызова конструктора с одним аргументом, тип которого — FileSystemProvider. Поставщики загружаются и создаются в порядке их перечисления в свойстве. Если этот процесс завершается ошибкой или схема поставщика не равна "file", генерируется неопределённая ошибка. Схемы URI обычно сравниваются без учёта регистра, но для стандартного поставщика схема должна быть "file". Первый класс поставщика создаётся путём вызова его с ссылкой на системного поставщика по умолчанию. Второй класс поставщика создаётся путём вызова его с ссылкой на первый экземпляр поставщика. Третий класс поставщика создаётся путём вызова его с ссылкой на второй экземпляр, и так далее. Последний созданный поставщик становится стандартным поставщиком; его метод
getFileSystem вызывается с URI "file:///" для получения ссылки на стандартную файловую систему.
Последующие вызовы этого метода возвращают файловую систему, возвращённую при первом вызове.
- Возвращает:
- стандартную файловую систему
getFileSystem
public static FileSystem getFileSystem(URI uri)
Возвращает ссылку на существующую FileSystem.
Этот метод перебирает поставщиков installed для поиска поставщика, идентифицированного схемой URI scheme данного URI. Схемы URI сравниваются без учёта регистра. Точный вид URI сильно зависит от поставщика. Если поставщик найден, вызывается метод getFileSystem поставщика для получения ссылки на
FileSystem.
После закрытия файловой системы, созданной этим поставщиком (closed), зависит от поставщика, возвращает ли этот метод ссылку на закрытую файловую систему или генерирует исключение FileSystemNotFoundException. Если поставщик позволяет создать новую файловую систему с тем же URI, что и ранее созданная, этот метод генерирует исключение, если вызывается после закрытия файловой системы (и до создания нового экземпляра методом newFileSystem).
Если установлен менеджер безопасности, реализация поставщика может потребовать проверки разрешения перед возвращением ссылки на существующую файловую систему. В случае файловой системы default проверка разрешения не требуется.
- Параметры:
-
uri- URI для поиска файловой системы - Возвращает:
- ссылку на файловую систему
- Исключения:
-
IllegalArgumentException- если не выполнены предварительные условия для параметраuri -
FileSystemNotFoundException- если файловая система, идентифицированная URI, не существует -
ProviderNotFoundException- если не установлен поставщик, поддерживающий схему URI -
SecurityException- если установлен менеджер безопасности и он отказывается предоставить неопределённое разрешение
newFileSystem
public static FileSystem newFileSystem(URI uri,
Map<String,?> env)
throws IOException Создаёт новую файловую систему, идентифицированную URI
Этот метод перебирает поставщиков installed для поиска поставщика, идентифицированного схемой URI scheme данного URI. Схемы URI сравниваются без учёта регистра. Точный вид URI сильно зависит от поставщика. Если поставщик найден, вызывается метод newFileSystem(URI,Map) поставщика для построения новой файловой системы.
После закрытия файловой системы (closed) зависит от поставщика, позволяет ли он создание новой файловой системы с тем же URI, что и ранее созданная.
Пример использования: Предположим, установлен поставщик, идентифицированный схемой "memory":
Map<String,String> env = new HashMap<>();
env.put("capacity", "16G");
env.put("blockSize", "4k");
FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"), env);
- Параметры:
-
uri- URI, идентифицирующий файловую систему -
env- карта свойств, специфичных для поставщика, для настройки файловой системы; может быть пустой - Возвращает:
- новую файловую систему
- Исключения:
-
IllegalArgumentException- если не выполнены предварительные условия для параметраuri, или параметрenvне содержит свойств, необходимых поставщику, или значение свойства некорректно -
FileSystemAlreadyExistsException- если файловая система уже создана -
ProviderNotFoundException- если не установлен поставщик, поддерживающий схему URI -
IOException- если при создании файловой системы произошла ошибка ввода-вывода -
SecurityException- если установлен менеджер безопасности и он отказывается предоставить неопределённое разрешение, требуемое реализацией поставщика файловой системы
newFileSystem
public static FileSystem newFileSystem(URI uri,
Map<String,?> env,
ClassLoader loader)
throws IOException Создаёт новую файловую систему, идентифицированную URI
Этот метод сначала пытается найти установленного поставщика точно так же, как метод newFileSystem(URI,Map). Если ни один из установленных поставщиков не поддерживает схему URI, предпринимается попытка найти поставщика с помощью предоставленного загрузчика классов. Если найден поставщик, поддерживающий схему URI, вызывается его метод newFileSystem(URI,Map) для построения новой файловой системы.
- Параметры:
-
uri- URI, идентифицирующий файловую систему -
env- карта свойств, специфичных для поставщика, для настройки файловой системы; может быть пустой -
loader- загрузчик классов для поиска поставщика илиnullдля поиска только установленного поставщика - Возвращает:
- новую файловую систему
- Исключения:
-
IllegalArgumentException- если не выполнены предварительные условия для параметраuri, или параметрenvне содержит свойств, необходимых поставщику, или значение свойства некорректно -
FileSystemAlreadyExistsException- если схема URI идентифицирует установленного поставщика, а файловая система уже создана -
ProviderNotFoundException- если не найден поставщик, поддерживающий схему URI -
ServiceConfigurationError- при ошибке загрузки поставщика сервиса -
IOException- при ошибке ввода-вывода при создании файловой системы -
SecurityException- если установлен менеджер безопасности и он отказывается предоставить неопределённое разрешение, требуемое реализацией поставщика файловой системы
newFileSystem
public static FileSystem newFileSystem(Path path,
ClassLoader loader)
throws IOException Создаёт новую FileSystem для доступа к содержимому файла как к файловой системе.
Этот метод использует специализированные поставщики, создающие псевдофайловые системы, где содержимое одного или нескольких файлов обрабатывается как файловая система.
Этот метод перебирает поставщиков installed. Поочерёдно вызывается метод newFileSystem(Path,Map) каждого поставщика с пустой картой. Если поставщик возвращает файловую систему, итерация завершается и возвращается файловая система. Если ни один из установленных поставщиков не возвращает FileSystem, предпринимается попытка найти поставщика с помощью предоставленного загрузчика классов. Если поставщик возвращает файловую систему, поиск завершается, и возвращается файловая система.
- Параметры:
-
path- путь к файлу -
loader- загрузчик классов для поиска поставщика илиnullдля поиска только установленного поставщика - Возвращает:
- новую файловую систему
- Исключения:
-
ProviderNotFoundException- если не найден поставщик, поддерживающий этот тип файла -
ServiceConfigurationError- при ошибке загрузки поставщика сервиса -
IOException- если произошла ошибка ввода-вывода -
SecurityException- если установлен менеджер безопасности и он отказывается предоставить неопределённое разрешение
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystems.html