Spec-Zone.ru › OpenJDK 17

Класс FileSystem

java.lang.Object
java.nio.file.FileSystem
Все реализуемые интерфейсы:
Closeable, AutoCloseable
public abstract class FileSystem extends Object implements Closeable
Обеспечивает интерфейс к файловой системе и является фабрикой для объектов доступа к файлам и другим объектам в файловой системе.

По умолчанию файловая система, полученная вызовом метода FileSystems.getDefault, предоставляет доступ к файловой системе, доступной виртуальной машине Java. Класс FileSystems определяет методы для создания файловых систем, предоставляющих доступ к другим типам (пользовательским) файловых систем.

Файловая система является фабрикой для нескольких типов объектов:

  • Метод getPath преобразует зависимую от системы строку пути, возвращая объект Path, который может быть использован для поиска и доступа к файлу.

  • Метод getPathMatcher используется для создания PathMatcher, выполняющего операции сопоставления с путями.

  • Метод getFileStores возвращает итератор по базовым file-stores.

  • Метод getUserPrincipalLookupService возвращает UserPrincipalLookupService для поиска пользователей или групп по имени.

  • Метод newWatchService создаёт WatchService, который может быть использован для наблюдения за объектами на предмет изменений и событий.

Файловые системы сильно различаются. В некоторых случаях файловая система представляет собой единую иерархию файлов с одной корневой директорией верхнего уровня. В других случаях она может иметь несколько различных файловых иерархий, каждая со своим корневым каталогом верхнего уровня. Метод getRootDirectories может использоваться для итерирования по корневым директориям в файловой системе. Как правило, файловая система состоит из одной или нескольких базовых file-stores, которые предоставляют хранение для файлов. Эти файловые хранилища также могут различаться по поддерживаемым функциям и файловым атрибутам или метаданным, которые они связывают с файлами.

Файловая система открыта при создании и может быть закрыта путём вызова метода close. После закрытия любая дальнейшая попытка доступа к объектам в файловой системе вызовет исключение ClosedFileSystemException. Файловые системы, созданные по умолчанию provider, не могут быть закрыты.

Файловая система может предоставлять доступ к файловой системе только для чтения или для чтения и записи. Режим доступа к файловой системе для чтения или записи устанавливается при создании файловой системы и может быть проверен с помощью вызова метода isReadOnly. Попытки записи в файловые хранилища с помощью объекта, связанного с файловой системой только для чтения, вызовут исключение ReadOnlyFileSystemException.

Файловые системы безопасны для использования несколькими потоками. Метод close может быть вызван в любое время для закрытия файловой системы, но вопрос о том, является ли файловая система асинхронно закрываемой, зависит от поставщика и поэтому не определён. Другими словами, если поток обращается к объекту в файловой системе, а другой поток вызывает метод close, то может потребоваться блокировка до завершения первой операции. Закрытие файловой системы приводит к закрытию всех открытых каналов, служб мониторинга и других объектов closeable, связанных с файловой системой.

С:
1.7

Краткое описание конструкторов

FileSystem()
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
abstract void close()
Закрывает эту файловую систему.
abstract Iterable<FileStore> getFileStores()
Возвращает объект для итерирования по базовым хранилищам файлов.
abstract Path getPath(String first, String... more)
Преобразует строку пути или последовательность строк, которые при объединении образуют строку пути, в объект Path.
abstract PathMatcher getPathMatcher(String syntaxAndPattern)
Возвращает PathMatcher, выполняющий операции сопоставления с String представлением объектов Path путём интерпретации заданного шаблона.
abstract Iterable<Path> getRootDirectories()
Возвращает объект для итерирования по путям корневых каталогов.
abstract String getSeparator()
Возвращает разделитель имён, представленный строкой.
abstract UserPrincipalLookupService getUserPrincipalLookupService()
Возвращает UserPrincipalLookupService для этой файловой системы (дополнительная операция).
abstract boolean isOpen()
Указывает, открыта ли эта файловая система.
abstract boolean isReadOnly()
Указывает, разрешает ли эта файловая система только чтение для своих хранилищ файлов.
abstract WatchService newWatchService()
Создаёт новый WatchService (дополнительная операция).
abstract FileSystemProvider provider()
Возвращает поставщика, который создал эту файловую систему.
abstract Set<String> supportedFileAttributeViews()
Возвращает набор имён names представлений атрибутов файлов, поддерживаемых этим FileSystem.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

FileSystem

protected FileSystem()
Инициализирует новый экземпляр этого класса.

Подробное описание методов

provider

public abstract FileSystemProvider provider()
Возвращает поставщика, который создал эту файловую систему.
Возвращает:
Поставщик, который создал эту файловую систему.

close

public abstract void close() throws IOException
Закрывает эту файловую систему.

После закрытия файловой системы все последующие обращения к файловой системе, будь то методы, определенные этим классом, или методы, связанные с этой файловой системой, вызывают исключение ClosedFileSystemException. Если файловая система уже закрыта, вызов этого метода не оказывает никакого эффекта.

Закрытие файловой системы закроет все открытые channels, directory-streams, watch-service и другие закрываемые объекты, связанные с этой файловой системой. Файловая система default закрыть нельзя.

Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе Closeable
Выбрасывает:
IOException - Если произошла ошибка ввода-вывода
UnsupportedOperationException - Выбрасывается в случае с файловой системой по умолчанию

isOpen

public abstract boolean isOpen()
Указывает, открыта ли эта файловая система.

Файловые системы, созданные поставщиком по умолчанию, всегда открыты.

Возвращает:
true если и только если эта файловая система открыта

isReadOnly

public abstract boolean isReadOnly()
Указывает, разрешает ли эта файловая система только чтение для своих хранилищ файлов.
Возвращает:
true если и только если эта файловая система предоставляет доступ только для чтения

getSeparator

public abstract String getSeparator()
Возвращает разделитель имен в виде строки.

Разделитель имен используется для разделения имен в строке пути. Реализация может поддерживать несколько разделителей имен, в этом случае этот метод возвращает реализуемый по умолчанию разделитель имен. Этот разделитель используется при создании строк путей с помощью метода toString().

В случае с поставщиком по умолчанию этот метод возвращает тот же разделитель, что и File.separator.

Возвращает:
Разделитель имен

getRootDirectories

public abstract Iterable<Path> getRootDirectories()
Возвращает объект для итерации по путям корневых каталогов.

Файловая система предоставляет доступ к хранилищу файлов, которое может состоять из нескольких отдельных иерархий файлов, каждая со своим корневым каталогом верхнего уровня. За исключением случаев, когда это запрещено менеджером безопасности, каждый элемент в возвращаемом итераторе соответствует корневому каталогу отдельной иерархии файлов. Порядок элементов не определен. Иерархии файлов могут изменяться в течение жизненного цикла виртуальной машины Java. Например, в некоторых реализациях вставка съемных носителей может привести к созданию новой иерархии файлов со своим корневым каталогом.

При установке менеджера безопасности он вызывается для проверки доступа к каждому корневому каталогу. В случае отказа корневой каталог не возвращается итератором. В случае с поставщиком по умолчанию метод SecurityManager.checkRead(String) вызывается для проверки доступа для чтения к каждому корневому каталогу. Зависит от системы, выполняются ли проверки разрешений при получении итератора или во время итерации.

Возвращает:
Объект для итерации по корневым каталогам

getFileStores

public abstract Iterable<FileStore> getFileStores()
Возвращает объект для итерации по хранилищам файлов.

Элементы возвращаемого итератора представляют собой объекты FileStores для этой файловой системы. Порядок элементов не определен, и хранилища файлов могут изменяться в течение жизненного цикла виртуальной машины Java. При возникновении ошибки ввода-вывода, возможно, потому что хранилище файлов недоступно, оно не возвращается итератором.

В случае с поставщиком по умолчанию и при установке менеджера безопасности, менеджер безопасности вызывается для проверки RuntimePermission("getFileStoreAttributes"). В случае отказа хранилища файлов не возвращаются итератором. Кроме того, метод менеджера безопасности SecurityManager.checkRead(String) вызывается для проверки доступа для чтения к верхнему каталогу хранилища файлов. В случае отказа хранилище файлов не возвращается итератором. Зависит от системы, выполняются ли проверки разрешений при получении итератора или во время итерации.

Пример использования: Предположим, мы хотим вывести использование места для всех хранилищ файлов:

     for (FileStore store: FileSystems.getDefault().getFileStores()) {
         long total = store.getTotalSpace() / 1024;
         long used = (store.getTotalSpace() - store.getUnallocatedSpace()) / 1024;
         long avail = store.getUsableSpace() / 1024;
         System.out.format("%-20s %12d %12d %12d%n", store, total, used, avail);
     }
 
Возвращает:
Объект для итерации по хранилищам файлов

supportedFileAttributeViews

public abstract Set<String> supportedFileAttributeViews()
Возвращает набор names представлений атрибутов файлов, поддерживаемых этой FileSystem.

BasicFileAttributeView обязательно должен поддерживаться, поэтому набор содержит как минимум один элемент, "basic".

Метод supportsFileAttributeView(String) может использоваться для проверки, поддерживает ли базовое хранилище файлов атрибуты файлов, определяемые представлением атрибутов файла.

Возвращает:
Неизменяемый набор имен поддерживаемых представлений атрибутов файла

getPath

public abstract Path getPath(String first, String... more)
Преобразует строку пути или последовательность строк, которые при объединении образуют строку пути, в Path. Если more не определяет никаких элементов, то значение параметра first является строкой пути, которую необходимо преобразовать. Если more определяет один или несколько элементов, то каждая непустая строка, включая first, рассматривается как последовательность элементов имени (см. Path) и объединяется для образования строки пути. Подробности о том, как строки объединяются, зависят от поставщика, но обычно они объединяются с использованием name-separator в качестве разделителя. Например, если разделитель имен равен "/" и вызван метод getPath("/foo","bar","gus"), то строка пути "/foo/bar/gus" преобразуется в Path. Path представляющий пустой путь, возвращается, если first является пустой строкой и more не содержит никаких непустых строк.

Разбор и преобразование в объект пути в значительной степени зависят от реализации. В простом случае строка пути отклоняется, и выбрасывается исключение InvalidPathException, если строка пути содержит символы, которые нельзя преобразовать в символы, являющиеся допустимыми для хранилища файлов. Например, в системах UNIX символ NUL (\u0000) не допускается в пути. Реализация может отклонить строки путей, содержащие имена, длина которых превышает допустимую длину для любого хранилища файлов, и где реализация поддерживает сложную синтаксическую конструкцию пути, она может отклонить строки путей, имеющие неправильную форму.

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

Этот метод выбрасывает исключение InvalidPathException, если строка пути не может быть преобразована. Где возможно и применимо, исключение создается со значением index, указывающим первую позицию в параметре path , которая привела к отклонению строки пути.

Параметры:
first - строка пути или начальная часть строки пути
more - дополнительные строки, которые должны быть объединены для формирования строки пути
Возвращает:
результирующий Path
Выбрасывает:
InvalidPathException - Если строка пути не может быть преобразована

getPathMatcher

public abstract PathMatcher getPathMatcher(String syntaxAndPattern)
Возвращает PathMatcher, который выполняет операции сопоставления с представлением String объектов Path путём интерпретации заданного шаблона. Параметр syntaxAndPattern определяет синтаксис и шаблон и имеет вид:
 syntax:pattern
 
где ':' обозначает себя.

Реализация FileSystem поддерживает синтаксисы "glob" и "regex", и может поддерживать другие. Значение компонента синтаксиса сравнивается без учёта регистра.

Когда синтаксис равен "glob", представление пути сопоставляется с использованием ограниченного языка шаблонов, напоминающего регулярные выражения, но с более простым синтаксисом. Например:

Язык шаблонов
Пример Описание
*.java Сопоставляет путь, представляющий имя файла, оканчивающееся на .java
*.* Сопоставляет имена файлов, содержащие точку
*.{java,class} Сопоставляет имена файлов, оканчивающиеся на .java или .class
foo.? Сопоставляет имена файлов, начинающиеся с foo. и односимвольным расширением
/home/*/* Сопоставляет /home/gus/data на платформах UNIX
/home/** Сопоставляет /home/gus и /home/gus/data на платформах UNIX
C:\\* Сопоставляет C:\foo и C:\bar на платформе Windows (обратите внимание, что обратный слэш экранирован; как строковый литерал в языке Java, шаблон будет "C:\\\\*")

Следующие правила используются для интерпретации шаблонов glob:

  • Символ * соответствует нулю или более символам characters компонента name без пересечения границ каталогов.

  • Символы ** соответствуют нулю или более символам characters, пересекая границы каталогов.

  • Символ ? соответствует ровно одному символу компонента имени.

  • Символ обратного слэша (\) используется для экранирования символов, которые в противном случае интерпретируются как специальные символы. Выражение \\ соответствует одиночному обратному слэшу, а "\{" - левой фигурной скобке, например.

  • Символы [ ] представляют собой выражение в квадратных скобках, которое соответствует одному символу компонента имени из набора символов. Например, [abc] соответствует "a", "b", или "c". Дефис (-) может использоваться для указания диапазона, так [a-z] определяет диапазон, соответствующий символам от "a" до "z" (включительно). Эти формы могут комбинироваться, например, [abce-g] соответствует "a", "b", "c", "e", "f" или "g". Если символ после [ является !, он используется для отрицания, например, [!a-c] соответствует любому символу, кроме "a", "b", или "c".

    Внутри выражения в квадратных скобках символы *, ? и \ соответствуют самим себе. Символ (-) соответствует самому себе, если он является первым символом внутри скобок или первым символом после !, если происходит отрицание.

  • Символы { } представляют собой группу подшаблонов, где группа соответствует, если соответствует любой подшаблон в группе. Символ "," используется для разделения подшаблонов. Группы не могут быть вложены.

  • Встретившиеся в начале имени файла символы точки / рассматриваются как обычные символы в операциях сопоставления. Например, шаблон glob "*" соответствует имени файла ".login". Метод Files.isHidden(java.nio.file.Path) может использоваться для проверки того, считается ли файл скрытым.

  • Все остальные символы соответствуют сами себе в зависимости от реализации. Это включает символы, представляющие любой name-separators.

  • Сопоставление компонентов root сильно зависит от реализации и не определено.

Когда синтаксис равен "regex", компонент шаблона представляет собой регулярное выражение, как определено классом Pattern.

Для обоих синтаксисов glob и regex детали сопоставления, такие как чувствительность к регистру, зависят от реализации и поэтому не определены.

Parameters:
syntaxAndPattern - Синтаксис и шаблон
Returns:
Сопоставитель путей, который может использоваться для сопоставления путей с шаблоном
Throws:
IllegalArgumentException - Если параметр не имеет вида: syntax:pattern
PatternSyntaxException - Если шаблон некорректен
UnsupportedOperationException - Если синтаксис шаблона неизвестен реализации
See Also:
  • Files.newDirectoryStream(Path,String)

getUserPrincipalLookupService

public abstract UserPrincipalLookupService getUserPrincipalLookupService()
Возвращает UserPrincipalLookupService для этой файловой системы (необязательная операция). Результирующая служба поиска может быть использована для поиска имён пользователей или групп.

Пример использования: Предположим, мы хотим назначить "joe" владельцем файла:

     UserPrincipalLookupService lookupService = FileSystems.getDefault().getUserPrincipalLookupService();
     Files.setOwner(path, lookupService.lookupPrincipalByName("joe"));
 
Returns:
Служба поиска UserPrincipalLookupService для этой файловой системы
Throws:
UnsupportedOperationException - Если у этой FileSystem нет службы поиска

newWatchService

public abstract WatchService newWatchService() throws IOException
Создаёт новый сервис WatchService (необязательная операция).

Этот метод создаёт новый сервис наблюдения, который может использоваться для наблюдения за зарегистрированными объектами на предмет изменений и событий.

Returns:
новый сервис наблюдения
Throws:
UnsupportedOperationException - Если эта FileSystem не поддерживает наблюдение за файловыми объектами на предмет изменений и событий. Это исключение не выбрасывается для FileSystems созданных по умолчанию поставщиком.
IOException - Если произошла ошибка ввода-вывода

© 1993, 2021, 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/17/docs/api/java.base/java/nio/file/FileSystem.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API