public interface Path extends Comparable<Path>, Iterable<Path>, Watchable
A Path
表示一个分层的路径,由一个特殊分隔符或分隔符分隔的目录和文件名元素序列组成。 也可以存在标识文件系统层次结构的根组件 。 距离目录层次结构根目录最远的名称元素是文件或目录的名称。 其他名称元素是目录名称。 A Path
可以表示根,根和序列的名称,或简单的一个或多个名称元素。 如果Path
仅由一个空的名称元素组成,则认为是空的路径 。 使用空路径访问文件等同于访问文件系统的默认目录。 Path
定义getFileName
, getParent
, getRoot
和subpath
方法来访问路径部件或它的名称元素的子序列。
除了访问路径的组件之外, Path
还定义了组合路径的resolve
和resolveSibling
方法。 可以用于构建两个路径之间的相对路径的relativize
方法。 路径可以是compared
,并使用startsWith
和endsWith
方法相互测试。
此接口扩展了Watchable
接口,使得路径位于的目录可以是registered
,带有一个WatchService
和目录中的条目。
警告:此接口仅用于开发自定义文件系统实现的那些实现。 方法可能会在以后的版本添加到此界面。
路径可以与Files
类一起使用,以对文件,目录和其他类型的文件进行操作。 例如,假设我们想要一个BufferedReader
从文件“ access.log
”中读取文本。 该文件位于相对于当前工作目录的目录“ logs
”中,并且是UTF-8编码的。
Path path = FileSystems.getDefault().getPath("logs", "access.log");
BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
与默认provider
相关联的路径通常可以与java.io.File
类进行互操作。 由其他提供商创建的路径不可能与由java.io.File表示的抽象路径名称互java.io.File
。 该toPath
方法可以被用于获得Path
从由A表示的抽象路径名java.io.File
对象。 所产生的Path
可以用于与java.io.File
对象相同的文件操作。 此外, toFile
方法是有用的构建File
从String
一个的表示Path
。
该接口的实现是不可变且安全的,可供多个并行线程使用。
Paths
Modifier and Type | Method and Description |
---|---|
int |
compareTo(Path other)
比较两个抽象的路径词典。
|
boolean |
endsWith(Path other)
测试此路径是否以给定的路径结束。
|
boolean |
endsWith(String other)
测试此路径是否以
Path 结束,通过转换给定的路径字符串,完全按照
endsWith(Path) 方法指定的方式构建。
|
boolean |
equals(Object other)
测试此路径与给定对象的相等性。
|
Path |
getFileName()
将此路径表示的文件或目录的名称返回为
Path 对象。
|
FileSystem |
getFileSystem()
返回创建此对象的文件系统。
|
Path |
getName(int index)
返回此路径的名称元素作为
Path 对象。
|
int |
getNameCount()
返回路径中的名称元素的数量。
|
Path |
getParent()
返回
父路径 ,或
null 如果此路径没有父。
|
Path |
getRoot()
返回此路径的根组分作为
Path 对象,或
null 如果该路径不具有根组件。
|
int |
hashCode()
计算此路径的哈希码。
|
boolean |
isAbsolute()
告诉这条路是否是绝对的。
|
Iterator<Path> |
iterator()
返回此路径的名称元素的迭代器。
|
Path |
normalize()
返回一个路径,该路径是冗余名称元素的消除。
|
WatchKey |
register(WatchService watcher, WatchEvent.Kind<?>... events)
使用手表服务注册此路径所在的文件。
|
WatchKey |
register(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers)
使用手表服务注册此路径所在的文件。
|
Path |
relativize(Path other)
构造此路径和给定路径之间的相对路径。
|
Path |
resolve(Path other)
根据这条路径解决给定的路径。
|
Path |
resolve(String other)
|
Path |
resolveSibling(Path other)
根据此路径的
parent 路径解决给定的路径。
|
Path |
resolveSibling(String other)
|
boolean |
startsWith(Path other)
测试此路径是否以给定的路径开始。
|
boolean |
startsWith(String other)
测试此路径是否以
Path ,通过转换给定的路径字符串,按照
startsWith(Path) 方法指定的方式构建。
|
Path |
subpath(int beginIndex, int endIndex)
返回一个相对的
Path ,它是该路径的名称元素的子序列。
|
Path |
toAbsolutePath()
返回表示此路径的绝对路径的
Path 对象。
|
File |
toFile()
返回表示此路径的 File 对象。
|
Path |
toRealPath(LinkOption... options)
返回现有文件的
真实路径。
|
String |
toString()
返回此路径的字符串表示形式。
|
URI |
toUri()
返回一个URI来表示此路径。
|
forEach, spliterator
FileSystem getFileSystem()
boolean isAbsolute()
绝对路径是完整的,因为它不需要与其他路径信息组合以便定位文件。
true
如果,只有这个路径是绝对的
Path getRoot()
Path
对象,或
null
如果该路径不具有根组件。
null
Path getFileName()
Path
对象。
文件名是目录层次结构中根目录中最远的元素。
null
Path getParent()
null
。
此路径对象的父对象由此路径的根组件(如果有)以及路径中的每个元素组成,除了距离目录层次结构中最远的根。 此方法不访问文件系统; 路径或其父可能不存在。 此外,该方法不会消除诸如“。”之类的特殊名称。 和“..”,可以在一些实现中使用。 例如,在UNIX上,“ /a/b/c
”的父级为“ /a/b
”,父级为"x/y/.
“为” x/y
“,该方法可与normalize
方法一起使用,以消除冗余名称,对于类似shell的导航为需要。
如果此路径具有一个或多个元素,并且没有根组件,则此方法等效于评估表达式:
subpath(0, getNameCount()-1);
int getNameCount()
0
如果此路径仅表示根组件
Path getName(int index)
Path
对象。
index
参数是要返回的名称元素的索引。 目录层次结构中最靠近根的元素具有索引0
。 离根最远的元素有索引count
-1
。
index
- 元素的索引
IllegalArgumentException
- 如果
index
为负数,则
index
大于或等于元素数,或该路径具有零名称元素
Path subpath(int beginIndex, int endIndex)
Path
,它是该路径的名称元素的子序列。
beginIndex
和endIndex
参数指定名称元素的子序列。 目录层次结构中最靠近根目录的名称具有索引0
。 距离根距离最远的名称有索引count
-1
。 返回的Path
对象的名称元素从beginIndex
开始,并扩展到索引endIndex-1
处的元素。
beginIndex
- 第一个元素的索引(包括)
endIndex
- 最后一个元素的索引,独占
Path
对象,这是Path中名称元素的一个
Path
IllegalArgumentException
- 如果beginIndex
为负数,或大于或等于元素数量。
如果endIndex
小于或等于beginIndex
,或大于元素数量。
boolean startsWith(Path other)
这条道路给定的路径开始后 ,如果这个路径的根组件给定的路径的根组件开始 ,这条路径具有相同名称元素作为给定的路径开始。 如果给定路径具有比此路径更多的名称元素,则返回false
。
该路径的根组件是否以给定路径的根组件开头是文件系统特定的。 如果此路径没有根组件,并且给定路径具有根组件,则此路径不以给定路径开始。
如果给定的路径与不同关联FileSystem
这个路径再false
返回。
other
- 给定的路径
true
如果这个路径从给定的路径开始;
否则false
boolean startsWith(String other)
Path
,通过转换给定的路径字符串,完全按照startsWith(Path)
方法指定的方式构建。
例如,在UNIX上,路径“ foo/bar
”以“ foo
”和“ foo/bar
” foo/bar
。
它不以“ f
”或“ fo
” fo
。
other
- 给定的路径字符串
true
如果这个路径从给定的路径开始;
否则false
InvalidPathException
- 如果路径字符串不能转换为路径。
boolean endsWith(Path other)
如果给定路径具有N个元素,并且没有根组件,并且该路径具有N个或更多个元素,则如果从距离根最远的元素开始的每个路径的最后N个元素相等,则该路径以给定路径结束。
如果给定路径具有根组件,则如果此路径的根组件以给定路径的根组件结束,则该路径以给定路径结束 ,并且两个路径的相应元素相等。 该路径的根组件是否以给定路径的根组件结束是文件系统特定的。 如果此路径没有根组件,并且给定路径具有根组件,则此路径不以给定路径结束。
如果给定的路径与不同关联FileSystem
这个路径再false
返回。
other
- 给定的路径
true
如果此路径以给定路径结束;
否则false
boolean endsWith(String other)
Path
结束,通过转换给定的路径字符串,按照endsWith(Path)
方法指定的方式构建。
例如,在UNIX上,路径“ foo/bar
”以“ foo/bar
”和“ bar
” bar
。
它不以“ r
”或“ /bar
” /bar
。
需要注意的是,后隔板不考虑,所以调用的是这种方法Path
“ foo/bar
”与String
“ bar/
”返回true
。
other
- 给定的路径字符串
true
如果此路径以给定路径结束;
否则false
InvalidPathException
- 如果路径字符串不能转换为路径。
Path normalize()
该方法的精确定义是依赖于实现的,但通常来说,该方法源自此路径,不包含冗余名称元素的路径。 在许多文件系统中,“ .
”和“ ..
”是用于指示当前目录和父目录的特殊名称。 在这样的文件系统中,所有出现的“ .
”都被认为是冗余的。 如果“ ..
”前面有一个非“ ..
”的名称,那么这两个名称都被认为是冗余的(识别这些名称的过程被重复,直到它不再适用)。
此方法不访问文件系统; 该路径可能找不到存在的文件。 从路径中删除“ ..
”和前面的名称可能导致定位与原始路径不同的文件的路径。 当前面的名称是符号链接时,可能会出现这种情况。
getParent()
,
toRealPath(java.nio.file.LinkOption...)
Path resolve(Path other)
如果other
参数是absolute
路径,那么这个方法平常返回other
。 如果other
是一个空的路径,那么这个方法平常返回这个路径。 否则,此方法将此路径视为目录,并根据此路径解析给定路径。 在最简单的情况下,给定的路径不具有root
部件,在这种情况下该方法加入给定的路径向此路径,并返回所得到的路径ends
与给定的路径。 在给定路径具有根组件的地方,则分辨率高度依赖于实现,因此未指定。
other
- 解决此路径的路径
relativize(java.nio.file.Path)
Path resolve(String other)
Path
并解析它针对此Path
在完全按规定的方式resolve
方法。
例如,假设名称分隔符为“ /
”,路径表示“ foo/bar
”,则使用路径字符串“ gus
”调用此方法将导致Path
“ foo/bar/gus
”。
other
- 要解决此路径的路径字符串
InvalidPathException
- 如果路径字符串不能转换为路径。
FileSystem.getPath(java.lang.String, java.lang.String...)
Path resolveSibling(Path other)
parent
路径解决给定的路径。
如果文件名需要替换为其他文件名,这是非常有用的。
例如,假设名称分隔符为“ /
”,路径为“ dir1/dir2/foo
”,则使用Path
“ bar
”调用此方法将导致Path
“ dir1/dir2/bar
”。
如果此路径没有父路径,或other
为absolute
,则此方法返回other
。
如果other
是一个空的路径,那么这个方法返回这个路径的父,或者这个路径没有父的空路径。
other
- 解决此路径父级的路径
resolve(Path)
Path resolveSibling(String other)
other
- 要解决此路径父级的路径字符串
InvalidPathException
- 如果路径字符串不能转换为路径。
FileSystem.getPath(java.lang.String, java.lang.String...)
Path relativize(Path other)
相对性是逆resolution
。 该方法尝试构建一个relative
路径,当路径resolved
针对该路径生成与给定路径相同的文件路径。 例如,在UNIX上,如果此路径为"/a/b"
,给定路径为"/a/b/c/d"
则相应的路径为"c/d"
。 在此路径和给定路径中没有root
组件的情况下,可以构建相对路径。 如果只有一个路径具有根组件,则不能构造相对路径。 如果两个路径都有一个根组件,那么如果可以构造一个相对路径,那么它是依赖于实现的。 如果此路径和给定路径为equal
,则返回空路径 。
对于任何两个normalized
路径p和q ,其中q没有根组件,
p .relativize( p .resolve( q )).equals( q )
当支持符号链接时,生成的路径是否在针对此路径解析时产生一个可用于定位same
文件的路径,因为other
是依赖于实现的。 例如,如果此路径为"/a/b"
,给定路径为"/a/x"
则所得的相对路径可能为"../x"
。 如果"b"
是符号链接,那么执行依赖,如果"a/b/../x"
将找到与"/a/x"
相同的文件。
other
- 相对于此路径的路径
IllegalArgumentException
-如果
other
不是
Path
可以在这种路径相对化
URI toUri()
该方法构造一个绝对的URI
,其中scheme
等于标识提供程序的URI方案。 方案具体部分的确切形式依赖于提供商。
在默认提供程序的情况下,URI是具有绝对的path
组件的层次结构。 查询和片段组件未定义。 是否定义了权限组件是否依赖于实现。 不能保证URI
可以用来构建一个java.io.File
。 特别地,如果该路径表示通用命名约定(UNC)路径,则可以在所得到的URI的权限组件中编码UNC服务器名称。 在默认提供程序的情况下,文件存在,并且可以确定该文件是目录,则生成的URI
将以斜杠结尾。
默认提供商为File
类提供了类似的往返保证。 对于给定的Path
p它是有保证的
只要原Paths.get
( p .toUri()).equals( p .toAbsolutePath
())
Path
,该URI
,新Path
都在(可能是不同的调用)相同的Java虚拟机创建。
其他提供者是否提供任何保证是提供者特定的,因此未指定。
当构建文件系统以访问文件的内容作为文件系统时,如果返回的URI表示文件系统中的给定路径,则它是高度实现特定的,或者它表示对包含文件系统的URI进行编码的复合 URI 。 此版本中未定义复合URI的格式; 这样的方案可以在将来的版本中添加。
IOError
- 如果获取绝对路径发生I / O错误,或者构造文件系统以文件系统访问文件的内容,并且无法获取封闭文件系统的URI
SecurityException
- 在默认提供程序和安全管理器的情况下,
toAbsolutePath
方法会引发安全异常。
Path toAbsolutePath()
Path
对象。
如果这个路径已经是absolute
,那么这个方法只是返回这个路径。 否则,此方法通过依赖于实现方式来解析路径,通常通过解析文件系统默认目录的路径。 根据实现情况,如果文件系统不可访问,此方法可能会导致I / O错误。
Path
绝对路径的
Path
对象
IOError
- 如果发生I / O错误
SecurityException
- 在默认提供程序的情况下,安装了一个安全管理器,并且此路径不是绝对的,那么将调用安全管理器的
checkPropertyAccess
方法来检查对系统属性的访问权限
user.dir
Path toRealPath(LinkOption... options) throws IOException
这种方法的精确定义是依赖于实现的,但通常来说,它源于此路径, absolute
路径将same
文件定位为此路径,但具有表示目录和文件的实际名称的名称元素。 例如,在文件系统上的文件名比较不区分大小写的情况下,名称元素表示实际情况下的名称。 此外,生成的路径具有删除的冗余名称元素。
如果这个路径是相对的,那么首先获得它的绝对路径,好像通过调用toAbsolutePath
方法。
options
阵列可用于指示如何处理符号链接。 默认情况下,符号链接被解析为最终目标。 如果选项NOFOLLOW_LINKS
存在,则此方法不能解析符号链接。 一些实现允许诸如“ ..
”之类的特殊名称来引用父目录。 当导出实际路径时,“ ..
”(或等效的)前面有一个非“ ..
”名称,那么实现通常会导致两个名称被删除。 当不解析符号链接并且前面的名称是一个符号链接时,只有当它保证生成的路径将找到与该路径相同的文件时,这些名称才被删除。
options
- 表示如何处理符号链接的选项
IOException
- 如果文件不存在或发生I / O错误
SecurityException
- 在默认提供程序和安全管理器的情况下,调用其
checkRead
方法来检查对该文件的读取访问,并且此路径不是绝对的,其
checkPropertyAccess
方法被调用以检查对系统属性的访问
user.dir
File toFile()
File
对象。
在这个Path
与默认提供程序相关联的情况下,该方法相当于返回一个File
对象,该对象使用该路径的String
表示。
如果这个路径是通过调用创建File
toPath
方法那么就不能保证File
通过这个方法返回的对象是equal
到原来File
。
File
对象
UnsupportedOperationException
- 如果此
Path
未与默认提供程序相关联
WatchKey register(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers) throws IOException
在此版本中,此路径定位存在的目录。 该目录已注册到手表服务,以便可以观看目录中的条目。 events
参数是要注册的事件,可能包含以下事件:
ENTRY_CREATE
- 创建或移动到目录中的条目 ENTRY_DELETE
- 条目删除或移出目录 ENTRY_MODIFY
- 目录中的条目已修改 该context
这些事件是由位于此路径的目录,并定位所创建,删除或修改目录项的路径之间的相对路径。
该组事件可能包括未由枚举StandardWatchEventKinds
定义的附加实现特定事件
该modifiers
参数指定有资格如何目录登记修饰 。 此版本未定义任何标准修饰符。 它可能包含实现特定的修饰符。
如果文件通过符号链接注册到手表服务,那么如果手表在注册后继续依赖于符号链接的存在,那么它是具体的实现。
register
在界面
Watchable
watcher
- 要注册该对象的监视服务
events
- 应该注册此对象的事件
modifiers
- 修改器(如果有)修改对象注册的方式
UnsupportedOperationException
- 如果指定了不支持的事件或修饰符
IllegalArgumentException
- 如果指定了事件或修饰符的无效组合
ClosedWatchServiceException
- 如果手表服务关闭
NotDirectoryException
- 如果该文件被注册以观看目录中的条目,并且该文件不是目录
(可选的特定异常)
IOException
- 如果发生I / O错误
SecurityException
- 在默认提供程序和安全管理器的情况下,调用
checkRead
方法来检查对该文件的读取访问。
WatchKey register(WatchService watcher, WatchEvent.Kind<?>... events) throws IOException
调用此方法的行为方式与调用完全相同
watchable.register
(watcher, events, new WatchEvent.Modifier[0]);
使用示例:假设我们要注册一个目录来创建,删除和修改事件:
Path dir = ...
WatchService watcher = ...
WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
register
在界面
Watchable
watcher
- 要注册此对象的手表服务
events
- 应该注册此对象的事件
UnsupportedOperationException
- 如果指定不支持的事件
IllegalArgumentException
- 如果指定了无效的事件组合
ClosedWatchServiceException
- 如果手表服务关闭
NotDirectoryException
- 如果该文件已注册以观看目录中的条目,并且该文件不是目录
(可选的特殊异常)
IOException
- 如果发生I / O错误
SecurityException
- 如果是默认提供程序,并安装了安全管理器,则会调用
checkRead
方法来检查对该文件的读取访问。
Iterator<Path> iterator()
迭代器返回的第一个元素表示最接近目录层次结构中根的名称元素,第二个元素是下一个元素,依此类推。 返回的最后一个元素是由此路径表示的文件或目录的名称。 root
组件(如果存在)不由迭代器返回。
int compareTo(Path other)
该方法可能不用于比较与不同文件系统提供程序相关联的路径。
compareTo
在界面
Comparable<Path>
other
- 与此路径相比较的路径。
equal
,则为零,如果此路径在字典上小于参数,则该值小于零,或者如果此路径在字典上大于参数,则该值大于零
ClassCastException
- 如果路径与不同的提供者相关联
boolean equals(Object other)
如果给定的对象不是路径,或者是与不同的FileSystem相关FileSystem
的路径,则此方法返回false
。
两条路径是否相等取决于文件系统的实现。 在某些情况下,不考虑情况比较路径,而其他路径是区分大小写的。 该方法不访问文件系统,并且不需要该文件。 如果需要,可以使用isSameFile
方法来检查两个路径是否找到相同的文件。
这种方法满足的总承包Object.equals
方法。
equals
在类别
Object
other
- 要比较此对象的对象
true
如果,并且只有当给定的对象是一个
Path
是相同的这个
Path
Object.hashCode()
, HashMap
int hashCode()
哈希码基于路径的组成部分,并满足Object.hashCode
方法的一般合同。
hashCode
在类别
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)