- java.lang.Object
-
- java.nio.file.FileSystem
-
- 实现的所有接口
-
Closeable
,AutoCloseable
public abstract class FileSystem extends Object implements Closeable
提供文件系统的接口,是用于访问文件系统中的文件和其他对象的对象的工厂。通过调用
FileSystems.getDefault
方法获得的默认文件系统提供对Java虚拟机可访问的文件系统的访问。FileSystems
类定义了创建文件系统的方法,这些文件系统提供对其他类型(自定义)文件系统的访问。文件系统是几种类型对象的工厂:
getPathMatcher
方法用于创建在路径上执行匹配操作的PathMatcher
。getFileStores
方法在底层file-stores
上返回一个迭代器。getUserPrincipalLookupService
方法返回UserPrincipalLookupService
以按名称查找用户或组。newWatchService
方法创建一个WatchService
,可用于监视对象的更改和事件。
文件系统差别很大。 在某些情况下,文件系统是具有一个顶级根目录的单个文件层次结构。 在其他情况下,它可能有几个不同的文件层次结构,每个层次结构都有自己的顶级根目录。
getRootDirectories
方法可用于迭代文件系统中的根目录。 文件系统通常由一个或多个底层file-stores
组成,它们为文件提供存储。 这些文件存储也可以在它们支持的功能以及它们与文件关联的文件属性或元数据方面有所不同。文件系统在创建时打开,可以通过调用其
close
方法来关闭。 关闭后,任何进一步尝试访问文件系统中的对象都会导致引发ClosedFileSystemException
。 无法关闭由默认provider
创建的文件系统。FileSystem
可以提供对文件系统的只读或读写访问。 创建FileSystem
时,是否建立了文件系统是否提供只读访问权限,并且可以通过调用其isReadOnly
方法进行测试。 尝试通过与只读文件系统关联的对象写入文件存储会抛出ReadOnlyFileSystemException
。文件系统可以安全地由多个并发线程使用。 可以随时调用
close
方法来关闭文件系统,但是文件系统是否是异步可关闭的是提供者特定的,因此未指定。 换句话说,如果一个线程正在访问文件系统中的一个对象,而另一个线程调用close
方法,那么它可能需要阻塞直到第一个操作完成。 关闭文件系统会导致关闭与文件系统关联的所有打开的通道,监视服务和其他closeable
对象。- 从以下版本开始:
- 1.7
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
FileSystem()
初始化此类的新实例。
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 abstract void
close()
关闭此文件系统。abstract Iterable<FileStore>
getFileStores()
返回一个迭代底层文件存储的对象。abstract Path
getPath(String first, String... more)
将路径字符串或从路径字符串连接时的字符串序列转换为Path
。abstract PathMatcher
getPathMatcher(String syntaxAndPattern)
返回PathMatcher
,它通过解释给定模式对Path
对象的String
表示执行匹配操作。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
。
-
-
-
方法详细信息
-
provider
public abstract FileSystemProvider provider()
返回创建此文件系统的提供程序。- 结果
- 创建此文件系统的提供程序。
-
close
public abstract void close() throws IOException
关闭此文件系统。关闭文件系统后,通过此类定义的方法或与此文件系统关联的对象对文件系统的所有后续访问都将抛出
ClosedFileSystemException
。 如果文件系统已关闭,则调用此方法无效。关闭文件系统将关闭所有打开的
channels
,directory-streams
,watch-service
这个文件系统关联,以及其它可关闭的对象。 无法关闭default
文件系统。- Specified by:
-
close
,界面AutoCloseable
- Specified by:
-
close
在界面Closeable
- 异常
-
IOException
- 如果发生I / O错误 -
UnsupportedOperationException
- 在默认文件系统的情况下抛出
-
isOpen
public abstract boolean isOpen()
判断此文件系统是否已打开。默认提供程序创建的文件系统始终处于打开状态。
- 结果
-
true
当且仅当此文件系统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虚拟机的生命周期内发生更改。 发生I / O错误时,可能是因为文件存储不可访问,因此迭代器不会返回它。如果是默认提供程序,并且安装了安全管理器,则会调用安全管理器以检查
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
,它通过解释给定模式对Path
对象的String
表示执行匹配操作。syntaxAndPattern
参数标识语法和模式,并采用以下形式:syntax:pattern
':'
代表自己。FileSystem
实现支持“glob
”和“regex
”语法,并且可能支持其他语法。 在不考虑大小写的情况下比较语法组件的值。当语法为“
Pattern Language Example Descriptionglob
”时,路径的String
表示使用类似于正则表达式但具有更简单语法的有限模式语言进行匹配。 例如:*.java
Matches a path that represents a file name ending in.java
*.*
Matches file names containing a dot*.{java,class}
Matches file names ending with.java
or.class
foo.?
Matches file names starting withfoo.
and a single character extension/home/*/*
Matches/home/gus/data
on UNIX platforms/home/**
Matches/home/gus
and/home/gus/data
on UNIX platformsC:\\*
MatchesC:\foo
andC:\bar
on the Windows platform (note that the backslash is escaped; as a string literal in the Java Language the pattern would be"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"
。在括号表达式的
*
,?
和\
字符匹配自身。 如果它是括号内的第一个字符,!
(-
)字符匹配,如果否定,!
之后的第一个字符。{ }
字符是一组子模式,如果组中的任何子模式匹配,则组匹配。","
字符用于分隔子模式。 组不能嵌套。文件名中的前导句点
/
点字符在匹配操作中被视为常规字符。 例如,"*"
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
- If an I/O error occurs
-
-