Класс 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
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | FileSystem() | Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void | close() | Закрывает эту файловую систему. |
abstract Iterable<FileStore> | getFileStores() | Возвращает объект для итерирования по базовым хранилищам файлов. |
abstract Path | getPath(String first,
String... more) | Преобразует строку пути или последовательность строк, образующих строку пути, в объект |
abstract PathMatcher | getPathMatcher(String syntaxAndPattern) | Возвращает объект |
abstract Iterable<Path> | getRootDirectories() | Возвращает объект для итерирования по путям корневых директорий. |
abstract String | getSeparator() | Возвращает разделитель имен, представленный как строка. |
abstract UserPrincipalLookupService | getUserPrincipalLookupService() | Возвращает поставщик для этой файловой системы (необязательная операция). |
abstract boolean | isOpen() | Указывает, открыта ли эта файловая система. |
abstract boolean | isReadOnly() | Указывает, допускает ли эта файловая система только чтение доступа к своим хранилищам. |
abstract WatchService | newWatchService() | Создает новую службу |
abstract FileSystemProvider | provider() | Возвращает поставщика, создавшего эту файловую систему. |
abstract Set<String> | supportedFileAttributeViews() | Возвращает набор имен |
Методы, объявленные в классе 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) может использоваться для проверки, поддерживает ли базовое FileStore атрибуты файлов, определённые представлением атрибутов.
- Возвращает:
- Неизменяемое множество имён поддерживаемых представлений атрибутов файлов
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", то представление пути String сопоставляется с помощью ограниченного языка шаблонов, напоминающего регулярные выражения, но с более простым синтаксисом. Например:
| Пример | Описание |
|---|---|
*.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, детали сопоставления, такие как регистрозависимое сопоставление, зависят от реализации и поэтому не указаны.
- Параметры:
-
syntaxAndPattern- Синтаксис и шаблон - Возвращает:
- Сопоставитель путей, который может использоваться для сопоставления путей с шаблоном
- Исключения:
-
IllegalArgumentException- Если параметр не имеет вид:syntax:pattern -
PatternSyntaxException- Если шаблон недействителен -
UnsupportedOperationException- Если синтаксис шаблона неизвестен реализации - См. также:
Files.newDirectoryStream(Path,String)
getUserPrincipalLookupService
public abstract UserPrincipalLookupService getUserPrincipalLookupService()
Возвращает UserPrincipalLookupService для этой файловой системы (необязательная операция). Результирующая служба поиска может использоваться для поиска имён пользователей или групп.
Пример использования: Предположим, что мы хотим назначить "joe" владельцем файла:
UserPrincipalLookupService lookupService = FileSystems.getDefault().getUserPrincipalLookupService();
Files.setOwner(path, lookupService.lookupPrincipalByName("joe"));
- Возвращает:
- Службу поиска
UserPrincipalLookupServiceдля этой файловой системы - Исключения:
-
UnsupportedOperationException- Если у этойFileSystemнет службы поиска
newWatchService
public abstract WatchService newWatchService()
throws IOException Создаёт новый WatchService (необязательная операция).
Этот метод создаёт новую службу наблюдения, которая может использоваться для наблюдения за зарегистрированными объектами на предмет изменений и событий.
- Возвращает:
- новую службу наблюдения
- Исключения:
-
UnsupportedOperationException- Если этаFileSystemне поддерживает наблюдение за объектами файловой системы на предмет изменений и событий. Это исключение не генерируетсяFileSystemsсозданной по умолчанию поставщиком. -
IOException- Если произошла ошибка ввода/вывода
© 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/FileSystem.html