- 所有已实现的接口:
Closeable
,AutoCloseable
通过调用 FileSystems.getDefault
方法获得的默认文件系统提供对 Java 虚拟机可访问的文件系统的访问。 FileSystems
类定义了创建文件系统的方法,这些文件系统提供对其他类型(自定义)文件系统的访问。
文件系统是几种类型对象的工厂:
getPathMatcher
方法用于创建对路径执行匹配操作的PathMatcher
。getFileStores
方法在基础file-stores
上返回一个迭代器。getUserPrincipalLookupService
方法返回UserPrincipalLookupService
以按名称查找用户或组。newWatchService
方法创建一个WatchService
可用于监视对象的更改和事件。
文件系统差异很大。在某些情况下,文件系统是具有一个顶级根目录的单一文件层次结构。在其他情况下,它可能有几个不同的文件层次结构,每个层次结构都有自己的顶级根目录。 getRootDirectories
方法可用于遍历文件系统中的根目录。文件系统通常由一个或多个为文件提供存储的底层file-stores
组成。这些文件存储在它们支持的功能以及它们与文件关联的文件属性或 meta-data 方面也可能有所不同。
文件系统在创建时是打开的,可以通过调用它的close
方法来关闭。一旦关闭,任何进一步尝试访问文件系统中的对象都会导致抛出 ClosedFileSystemException
。默认创建的文件系统provider
无法关闭。
FileSystem
可以提供对文件系统的只读或读写访问。文件系统是否提供只读访问是在创建 FileSystem
时确定的,可以通过调用其 isReadOnly
方法来测试。尝试通过与只读文件系统关联的对象写入文件存储会抛出 ReadOnlyFileSystemException
。
文件系统可以安全地供多个并发线程使用。可以随时调用 close
方法来关闭文件系统,但是文件系统是否异步关闭是特定于提供者的,因此未指定。换句话说,如果一个线程正在访问文件系统中的一个对象,而另一个线程调用 close
方法,那么它可能需要阻塞,直到第一个操作完成。关闭文件系统会导致关闭所有打开的通道、监视服务和其他与文件系统关联的closeable
对象。
- 自从:
- 1.7
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract void
close()
关闭此文件系统。返回一个对象以遍历底层文件存储。abstract Path
将路径字符串或连接形成路径字符串的字符串序列转换为Path
。abstract PathMatcher
getPathMatcher
(String syntaxAndPattern) 返回一个对象以遍历根目录的路径。abstract String
返回名称分隔符,表示为字符串。abstract UserPrincipalLookupService
返回此文件系统的UserPrincipalLookupService
(可选操作).abstract boolean
isOpen()
告知此文件系统是否打开。abstract boolean
告知此文件系统是否只允许对其文件存储进行只读访问。abstract WatchService
构造一个新的WatchService
(可选操作).abstract FileSystemProvider
provider()
返回创建此文件系统的提供者。返回此FileSystem
支持的文件属性视图的names
的集合。
-
构造方法详细信息
-
FileSystem
protected FileSystem()初始化此类的新实例。
-
-
方法详情
-
provider
返回创建此文件系统的提供者。- 返回:
- 创建此文件系统的提供程序。
-
close
关闭此文件系统。文件系统关闭后,所有后续对该文件系统的访问,无论是通过此类定义的方法,还是通过与该文件系统关联的对象,都会抛出
ClosedFileSystemException
。如果文件系统已经关闭,则调用此方法无效。关闭文件系统将关闭所有打开的
channels
、directory-streams
、watch-service
以及与该文件系统关联的其他可关闭对象。无法关闭default
文件系统。- 指定者:
close
在接口AutoCloseable
中- 指定者:
close
在接口Closeable
中- 抛出:
IOException
- 如果发生 I/O 错误UnsupportedOperationException
- 在默认文件系统的情况下抛出
-
isOpen
public abstract boolean isOpen()告知此文件系统是否打开。默认提供程序创建的文件系统始终打开。
- 返回:
true
当且仅当此文件系统打开时
-
isReadOnly
public abstract boolean isReadOnly()告知此文件系统是否只允许对其文件存储进行只读访问。- 返回:
true
当且仅当此文件系统提供只读访问时
-
getSeparator
返回名称分隔符,表示为字符串。名称分隔符用于分隔路径字符串中的名称。一个实现可能支持多个名称分隔符,在这种情况下,此方法返回一个特定于实现的 default 名称分隔符。通过调用
toString()
方法创建路径字符串时使用此分隔符。对于默认提供程序,此方法返回与
File.separator
相同的分隔符。- 返回:
- 名称分隔符
-
getRootDirectories
返回一个对象以遍历根目录的路径。文件系统提供对文件存储的访问,文件存储可能由许多不同的文件层次结构组成,每个文件层次结构都有自己的顶级根目录。除非安全管理器拒绝,否则返回的迭代器中的每个元素都对应于不同文件层次结构的根目录。元素的顺序未定义。文件层次结构可能会在 Java 虚拟机的生命周期内发生变化。例如,在一些实现中,可移动媒体的插入可能导致创建具有其自己的顶级目录的新文件层次结构。
安装安全管理器后,将调用它来检查对每个根目录的访问。如果被拒绝,则迭代器不会返回根目录。对于默认提供程序,将调用
SecurityManager.checkRead(String)
方法来检查对每个根目录的读取访问权限。如果在获取迭代器时或在迭代期间完成权限检查,则取决于系统。- 返回:
- 遍历根目录的对象
-
getFileStores
返回一个对象以遍历底层文件存储。返回的迭代器的元素是此文件系统的
FileStores
。元素的顺序未定义,文件存储可能会在 Java 虚拟机的生命周期内发生变化。当发生 I/O 错误时,可能是因为文件存储不可访问,迭代器不会返回它。在默认提供程序的情况下,安装了安全管理器,调用安全管理器来检查
RuntimePermission
("getFileStoreAttributes")
。如果被拒绝,则迭代器不会返回任何文件存储。此外,调用安全管理器的SecurityManager.checkRead(String)
方法来检查对文件存储的 top-most 目录的读取访问。如果被拒绝,则迭代器不会返回文件存储。如果在获取迭代器时或在迭代期间完成权限检查,则取决于系统。使用示例:假设我们要打印所有文件存储的空间使用情况:
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
返回此FileSystem
支持的文件属性视图的names
的集合。BasicFileAttributeView
需要得到支持,因此该集合至少包含一个元素“basic”。supportsFileAttributeView(String)
方法可用于测试底层FileStore
是否支持由文件属性视图标识的文件属性。- 返回:
- 一组不可修改的受支持文件属性视图的名称
-
getPath
将路径字符串或连接形成路径字符串的字符串序列转换为Path
。如果more
未指定任何元素,则first
参数的值是要转换的路径字符串。如果more
指定一个或多个元素,则每个非空字符串(包括first
)都被视为一系列名称元素(请参阅Path
)并连接以形成路径字符串。有关如何连接字符串的详细信息是特定于提供者的,但通常会使用name-separator
作为分隔符来连接它们。例如,如果名称分隔符是“/
”并且调用了getPath("/foo","bar","gus")
,则路径字符串"/foo/bar/gus"
将转换为Path
。如果first
是空字符串并且more
不包含任何非空字符串,则返回表示空路径的Path
。路径对象的解析和转换本质上是依赖于实现的。在最简单的情况下,如果路径字符串包含无法转换为文件存储中legal字符的字符,则路径字符串将被拒绝并抛出
InvalidPathException
。例如,在 UNIX 系统上,NUL (\u0000) 字符不允许出现在路径中。一个实现可以选择拒绝包含比任何文件存储所允许的名称长的名称的路径字符串,并且在一个实现支持复杂路径语法的地方,它可以选择拒绝 badly formed 的路径字符串。对于默认提供程序,路径字符串是根据平台或虚拟文件系统级别的路径定义来解析的。例如,操作系统可能不允许特定字符出现在文件名中,但特定的底层文件存储可能会对合法字符集施加不同或额外的限制。
当无法将路径字符串转换为路径时,此方法将抛出
InvalidPathException
。在可能且适用的情况下,将使用index
值创建异常,该值指示path
参数中导致路径字符串被拒绝的第一个位置。- 参数:
first
- 路径字符串或路径字符串的初始部分more
- 要连接以形成路径字符串的附加字符串- 返回:
-
结果
Path
- 抛出:
InvalidPathException
- 如果无法转换路径字符串
-
getPathMatcher
返回一个PathMatcher
,它通过解释给定的模式对Path
对象的String
表示执行匹配操作。syntaxAndPattern
参数标识语法和模式并采用以下形式:syntax:pattern
':'
代表它自己。FileSystem
实现支持“glob
”和“regex
”语法,并且可能支持其他语法。比较语法组件的值时不考虑大小写。当语法为“
glob
”时,路径的String
表示将使用类似于正则表达式但语法更简单的有限模式语言进行匹配。例如:示例 Description *.java
匹配表示以 .java
结尾的文件名的路径*.*
匹配包含点的文件名 *.{java,class}
匹配以 .java
或.class
结尾的文件名foo.?
匹配以 foo.
和单个字符扩展名开头的文件名/home/*/*
在 UNIX 平台上匹配 /home/gus/data
/home/**
在 UNIX 平台上匹配 /home/gus
和/home/gus/data
C:\\*
在 Windows 平台上匹配 C:\foo
和C:\bar
(注意反斜杠被转义;作为 Java 语言中的字符串文字,模式将是"C:\\\\*"
)以下规则用于解释 glob 模式:
*
字符与name
组件的零个或多个characters
匹配,而不跨越目录边界。**
字符匹配零个或多个characters
跨越目录边界。?
字符恰好匹配名称组件的一个字符。反斜杠字符 (
\
) 用于转义否则会被解释为特殊字符的字符。例如,表达式\\
匹配单个反斜杠,“\{”匹配左括号。[ ]
字符是括号表达式匹配一组字符中名称组件的单个字符。例如,[abc]
匹配"a"
、"b"
或"c"
。连字符 (-
) 可用于指定范围,因此[a-z]
指定的范围与"a"
到"z"
(含)匹配。这些形式可以混合使用,因此 [abce-g] 匹配"a"
、"b"
、"c"
、"e"
、"f"
或"g"
。如果[
之后的字符是!
,则它用于否定,因此[!a-c]
匹配除"a"
、"b"
或"c"
之外的任何字符。在括号表达式中,
*
、?
和\
字符匹配自身。如果 (-
) 字符是方括号内的第一个字符,或者如果取反,则匹配!
之后的第一个字符。{ }
字符是一组子模式,如果组中的任何子模式匹配,则该组匹配。","
字符用于分隔子模式。组不能嵌套。文件名中的前导 period
/
点字符在匹配操作中被视为常规字符。例如,"*"
glob 模式匹配文件名".login"
。Files.isHidden(java.nio.file.Path)
方法可用于测试文件是否被认为是隐藏的。所有其他字符以依赖于实现的方式匹配自身。这包括代表任何
name-separators
的字符。root
组件的匹配高度依赖于实现,未指定。
当语法为“
regex
”时,模式组件是Pattern
类定义的正则表达式。对于 glob 和 regex 语法,匹配细节(例如匹配是否区分大小写)取决于实现,因此未指定。
- 参数:
syntaxAndPattern
- 语法和模式- 返回:
- 可用于将路径与模式匹配的路径匹配器
- 抛出:
IllegalArgumentException
- 如果参数不采用以下形式:syntax:pattern
PatternSyntaxException
- 如果模式无效UnsupportedOperationException
- 如果实现不知道模式语法- 参见:
-
getUserPrincipalLookupService
返回此文件系统的UserPrincipalLookupService
(可选操作).生成的查找服务可用于查找用户名或组名。使用示例:假设我们想让“joe”成为一个文件的所有者:
UserPrincipalLookupService lookupService = FileSystems.getDefault().getUserPrincipalLookupService(); Files.setOwner(path, lookupService.lookupPrincipalByName("joe"));
- 返回:
-
此文件系统的
UserPrincipalLookupService
- 抛出:
UnsupportedOperationException
- 如果这个FileSystem
没有查找服务
-
newWatchService
构造一个新的WatchService
(可选操作).此方法构造一个新的监视服务,可用于监视已注册对象的更改和事件。
- 返回:
- 新的手表服务
- 抛出:
UnsupportedOperationException
- 如果此FileSystem
不支持监视文件系统对象的更改和事件。默认提供程序创建的FileSystems
不会抛出此异常。IOException
- 如果发生 I/O 错误
-