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