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
创建的文件系统无法关闭。
A FileSystem
可以提供对文件系统的只读或读写访问。 所述,当一个文件系统是否提供只读访问建立FileSystem
被创建,并且可以通过调用它来测试isReadOnly
方法。 通过与只读文件系统相关联的对象写入文件存储库的尝试会抛出ReadOnlyFileSystemException
。
文件系统是安全的多个并发线程使用。 可以随时调用close
方法来关闭文件系统,但文件系统是否是异步关闭的是提供者特定的,因此未指定。 换句话说,如果线程正在访问文件系统中的对象,而另一个线程调用close
方法,则可能需要阻止直到第一个操作完成。 关闭文件系统会导致与文件系统关联的所有打开的通道,监视服务和其他closeable
对象关闭。
Modifier | Constructor and Description |
---|---|
protected |
FileSystem()
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
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()
返回
FileSystem支持的文件属性视图的一组
FileSystem 。
|
public abstract FileSystemProvider provider()
public abstract void close() throws IOException
文件系统关闭后,所有后续访问文件系统,无论是通过此类定义的方法或与此文件系统相关的对象,都会抛出ClosedFileSystemException
。 如果文件系统已经关闭,则调用此方法没有任何作用。
关闭文件系统将关闭所有打开channels
, directory-streams
, watch-service
这个文件系统相关联,以及其它可关闭的对象。 default
文件系统无法关闭。
close
在界面
Closeable
close
在界面
AutoCloseable
IOException
- 如果发生I / O错误
UnsupportedOperationException
- 在默认文件系统的情况下抛出
public abstract boolean isOpen()
默认提供程序创建的文件系统始终打开。
true
如果,只有这个文件系统是打开的
public abstract boolean isReadOnly()
true
如果,且仅当此文件系统提供只读访问权限
public abstract String getSeparator()
名称分隔符用于分隔路径字符串中的名称。 实现可以支持多个名称分隔符,在这种情况下,此方法返回一个实现特定的默认名称分隔符。 通过调用toString()
方法创建路径字符串时使用此分隔符。
在默认提供程序的情况下,此方法返回与File.separator
相同的分隔符 。
public abstract Iterable<Path> getRootDirectories()
文件系统提供对文件存储的访问,该文件存储可以由多个不同的文件层次结构组成,每个具有其自己的顶级根目录。 除非安全管理器被拒绝,否则返回的迭代器中的每个元素都对应于不同文件层次结构的根目录。 元素的顺序没有定义。 文件层次结构可能会在Java虚拟机的生命周期内更改。 例如,在一些实现中,可移动介质的插入可能导致用其自己的顶级目录创建新的文件层次结构。
安装安全管理器时,会调用它来检查对每个根目录的访问。 如果被拒绝,则根目录不会由迭代器返回。 在默认提供程序的情况下,调用SecurityManager.checkRead(String)
方法来检查对每个根目录的读取访问。 如果获取迭代器或迭代时执行权限检查,则系统依赖。
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);
}
public abstract Set<String> supportedFileAttributeViews()
FileSystem
。
BasicFileAttributeView
需要被支持,因此该集合至少包含一个元素“basic”。
supportsFileAttributeView(String)
方法可用于测试底层FileStore
是否支持由文件属性视图标识的文件属性。
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
- 如果无法转换路径字符串
public abstract PathMatcher getPathMatcher(String syntaxAndPattern)
PathMatcher
,其对所述匹配操作String
的表示Path
米通过解释一个给定的图案的物体。
syntaxAndPattern
参数标识语法和模式,并采取以下形式:
其中syntax:pattern
':'
代表自己。
A FileSystem
实现支持“ glob
”和“ regex
”语法,并可能支持其他语言。 比较语法组件的值而不考虑情况。
当语法为“ glob
”时,路径的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 with foo.
and a single character extension/home/*/* Matches /home/gus/data on UNIX platforms /home/** Matches /home/gus and /home/gus/data on UNIX platforms C:\\* Matches C:\foo and C:\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模式:
*
字符匹配一个或多个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和正则表达式语法,匹配的细节(例如匹配是否区分大小写)是否依赖于实现,因此未指定。
syntaxAndPattern
- 语法和模式
IllegalArgumentException
- 如果参数不采用以下形式:
syntax:pattern
PatternSyntaxException
- 如果模式无效
UnsupportedOperationException
- 如果模式语法对实现不了解
Files.newDirectoryStream(Path,String)
public abstract UserPrincipalLookupService getUserPrincipalLookupService()
UserPrincipalLookupService
(可选操作) 。
所得到的查找服务可用于查找用户或组名称。
使用示例:假设我们要让“joe”文件的所有者:
UserPrincipalLookupService lookupService = FileSystems.getDefault().getUserPrincipalLookupService();
Files.setOwner(path, lookupService.lookupPrincipalByName("joe"));
UserPrincipalLookupService
UnsupportedOperationException
- 如果这个
FileSystem
没有查找服务
public abstract WatchService newWatchService() throws IOException
WatchService
(可选操作) 。
此方法构造一个新的watch服务,可以用于监视注册对象的更改和事件。
UnsupportedOperationException
- 如果这个FileSystem
不支持观察文件系统对象的更改和事件。
此异常不会被抛出FileSystems
由默认提供者创建。
IOException
- If an I/O error occurs