Класс 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 |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
close() |
Закрывает эту файловую систему. |
abstract Iterable |
getFileStores() |
Возвращает объект для итерации по базовым хранилищам файлов. |
abstract Path |
getPath |
Преобразует строку пути или последовательность строк, которые при объединении образуют строку пути, в Path. |
abstract PathMatcher |
getPathMatcher |
Возвращает PathMatcher, который выполняет операции сопоставления с представлением String объекта Path, интерпретируя заданный шаблон. |
abstract Iterable |
getRootDirectories() |
Возвращает объект для итерации по путям корневых каталогов. |
abstract String |
getSeparator() |
Возвращает разделитель имен, представленный строкой. |
abstract UserPrincipalLookupService |
getUserPrincipalLookupService() |
Возвращает UserPrincipalLookupService для этой файловой системы (дополнительная операция). |
abstract boolean |
isOpen() |
Указывает, открыта ли эта файловая система. |
abstract boolean |
isReadOnly() |
Указывает, разрешает ли эта файловая система только чтение-только доступ к своим хранилищам файлов. |
abstract WatchService |
newWatchService() |
Создает новый WatchService (дополнительная операция). |
abstract FileSystemProvider |
provider() |
Возвращает поставщика, который создал эту файловую систему. |
abstract Set |
supportedFileAttributeViews() |
Возвращает набор names представлений атрибутов файлов, поддерживаемых этой FileSystem. |
Подробное описание конструкторов
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. Например, в некоторых реализациях вставка съемных носителей может привести к созданию новой файловой иерархии со своим собственным корневым каталогом. Нет гарантии, что к корневому каталогу можно получить доступ.
- Возвращает:
- Объект для итерации по корневым каталогам
getFileStores
public abstract Iterable<FileStore> getFileStores()
Элементами возвращаемого итератора являются FileStores для этой файловой системы. Порядок элементов не определен, и файловые хранилища могут изменяться в течение жизненного цикла виртуальной машины Java. Если возникает ошибка ввода-вывода, возможно, потому что файловое хранилище недоступно, то оно не возвращается итератором.
Пример использования: Предположим, что мы хотим распечатать использование места для всех файловых хранилищ:
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", то представление пути сопоставляется с помощью ограниченного языка шаблонов, напоминающего регулярные выражения, но с более простым синтаксисом. Например:
| Пример | Описание |
|---|---|
*.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:\\\\*") |
Следующие правила используются для интерпретации шаблонов:
Символ
*сопоставляет ноль или болееcharactersкомпонента имениnameбез пересечения границ каталогов.Символ
**сопоставляет ноль или болееcharacters, пересекая границы каталогов.Символ
?сопоставляет ровно один символ компонента имени.Символ обратной косой черты (
\) используется для экранирования символов, которые в противном случае интерпретируются как специальные символы. Выражение\\сопоставляет одну обратную косую черту, а "\{" сопоставляет левую фигурную скобку, например.-
Символы
[ ]— это выражение в квадратных скобках, которое сопоставляет один символ компонента имени из набора символов. Например,[abc]сопоставляет"a","b"или"c". Тире (-) может использоваться для указания диапазона, поэтому[a-z]задаёт диапазон, который сопоставляет символы от"a"до"z"(включительно). Эти формы могут быть смешаны, поэтому [abce-g] сопоставляет"a","b","c","e","f"или"g". Если символ после[— это!, то он используется для отрицания, поэтому[!a-c]сопоставляет любой символ, кроме"a","b"или"c".Внутри выражения в квадратных скобках символы
*,?и\сопоставляют сами себя. Символ (-) сопоставляет сам себя, если он является первым символом в скобках или первым символом после!, если отрицание. Символы
{ }представляют собой группу подшаблонов, где группа сопоставляется, если любой подшаблон в группе сопоставляется. Символ","используется для разделения подшаблонов. Группы не могут быть вложены.Ведущие точки в имени файла рассматриваются как обычные символы в операциях сопоставления. Например, шаблон
"*"сопоставляется с именем файла".login". МетодFiles.isHidden(java.nio.file.Path)может быть использован для проверки, является ли файл скрытым.Все остальные символы сопоставляют сами себя в зависимости от реализации. Это включает символы, представляющие любой
name-separators.Сопоставление компонентов
rootсильно зависит от реализации и не специфицируется.
Если синтаксис равен "regex", то компонент шаблона является регулярным выражением, определённым классом Pattern.
Для обоих синтаксисов (шаблонов и регулярных выражений) детали сопоставления, такие как чувствительность к регистру, зависят от реализации и поэтому не специфицируются.
- Параметры:
-
syntaxAndPattern- Синтаксис и шаблон - Возвращает:
- Матчер путей, который может быть использован для сопоставления путей с шаблоном
- Исключения:
-
IllegalArgumentException- Если параметр не имеет вида:syntax:pattern -
PatternSyntaxException- Если шаблон некорректен -
UnsupportedOperationException- Если синтаксис шаблона неизвестен реализации - См. также:
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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/file/FileSystem.html