- 所有父级接口:
Comparable<Path>,Iterable<Path>,Watchable
Path 表示一个层次化的路径,由一系列由特殊分隔符或定界符分隔的目录和文件名元素组成。标识文件系统层次结构的 root component 也可能存在。从目录层次结构的根开始 farthest 的名称元素是文件或目录的名称。其他名称元素是目录名称。 Path 可以表示一个根、一个根和一系列名称,或者只是一个或多个名称元素。 Path 被认为是空路径如果它仅由一个空的名称元素组成。使用一个访问文件空路径相当于访问文件系统的默认目录。 Path 定义了 getFileName 、 getParent 、 getRoot 和 subpath 方法来访问路径组件或其名称元素的子序列。
除了访问路径的组件之外,Path 还定义了 resolve 和 resolveSibling 方法来组合路径。 relativize 方法可用于在两条路径之间构造相对路径。路径可以是 compared ,并使用 startsWith 和 endsWith 方法相互测试。
此接口扩展了 Watchable 接口,因此路径所在的目录可以是 registered 和 WatchService 以及目录中的条目。
WARNING:此接口仅供那些开发自定义文件系统实现的人员实现。在未来的版本中,可能会将方法添加到此接口。
访问文件
路径可以与 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 方法可用于从 java.io.File 对象表示的抽象路径名中获取 Path。生成的 Path 可用于操作与 java.io.File 对象相同的文件。此外,toFile 方法可用于从 Path 的 String 表示构造 File。
并发
此接口的实现是不可变的,可以安全地供多个并发线程使用。
- 自从:
- 1.7
-
方法总结
修饰符和类型方法描述int按字典顺序比较两个抽象路径。default boolean测试此路径是否以Path结尾,通过转换给定的路径字符串构造,完全按照endsWith(Path)方法指定的方式。boolean测试此路径是否以给定路径结尾。boolean测试此路径是否与给定对象相等。返回此路径表示的文件或目录的名称作为Path对象。返回创建此对象的文件系统。getName(int index) 将此路径的名称元素作为Path对象返回。int返回路径中名称元素的数量。如果此路径没有父级,则返回 parent path 或null。getRoot()返回此路径的根组件作为Path对象,或null如果此路径没有根组件。inthashCode()计算此路径的哈希码。boolean判断此路径是否是绝对路径。iterator()返回此路径的名称元素的迭代器。返回一个路径,该路径是删除了冗余名称元素的路径。static Path通过转换路径字符串或连接形成路径字符串的字符串序列返回Path。static Path通过转换 URI 返回一个Path。default WatchKeyregister(WatchService watcher, WatchEvent.Kind<?>... events) 向监视服务注册此路径所在的文件。register(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers) 向监视服务注册此路径所在的文件。relativize(Path other) 构造此路径和给定路径之间的相对路径。default Path根据此路径解析给定路径。default PathresolveSibling(String other) default PathresolveSibling(Path other) 根据此路径的parent路径解析给定路径。default booleanstartsWith(String other) 测试此路径是否以Path开头,通过转换给定的路径字符串构造,完全按照startsWith(Path)方法指定的方式。booleanstartsWith(Path other) 测试此路径是否以给定路径开头。subpath(int beginIndex, int endIndex) 返回一个相对的Path,它是此路径的名称元素的子序列。返回一个代表该路径绝对路径的Path对象。default FiletoFile()返回表示此路径的File对象。toRealPath(LinkOption... options) 返回现有文件的 real 路径。toString()返回此路径的字符串表示形式。toUri()返回表示此路径的 URI。在接口 java.lang.Iterable 中声明的方法
forEach, spliterator
-
方法详情
-
of
通过转换路径字符串或连接形成路径字符串的字符串序列返回Path。如果more未指定任何元素,则first参数的值是要转换的路径字符串。如果more指定一个或多个元素,则每个非空字符串(包括first)都被视为一系列名称元素,并连接起来形成路径字符串。有关如何连接字符串的详细信息是特定于提供者的,但通常会使用name-separator作为分隔符来连接它们。例如,如果名称分隔符是“/”并且调用了getPath("/foo","bar","gus"),则路径字符串"/foo/bar/gus"将转换为Path。如果first是空字符串并且more不包含任何非空字符串,则返回表示空路径的Path。Path是通过调用defaultFileSystem的getPath方法获得的。请注意,虽然此方法非常方便,但使用它意味着假定引用了默认值
FileSystem并限制了调用代码的实用性。因此,它不应该用于旨在灵活重用的库代码中。更灵活的替代方案是使用现有的Path实例作为锚点,例如:Path dir = ... Path path = dir.resolve("file");- 参数:
first- 路径字符串或路径字符串的初始部分more- 要连接以形成路径字符串的附加字符串- 返回:
-
结果
Path - 抛出:
InvalidPathException- 如果路径字符串无法转换为Path- 自从:
- 11
- 参见:
-
of
通过转换 URI 返回一个Path。此方法遍历
installed提供程序以找到由给定 URI 的 URIscheme标识的提供程序。 URI 方案的比较不考虑大小写。如果找到提供者,则调用其getPath方法来转换 URI。在默认提供者的情况下,由 URI 方案“文件”标识,给定的 URI 具有非空路径组件,以及未定义的查询和片段组件。权限组件是否存在是平台特定的。返回的
Path与default文件系统相关联。默认提供程序为
File类提供类似的 round-trip 保证。对于给定的Pathp保证
只要原来的Path.of(p.toUri()).equals(p.toAbsolutePath())Path、URI和新的Path都是在同一个 Java 虚拟机(可能是不同的调用)中创建的。其他提供商是否做出任何保证是提供商特定的,因此未指定。- 参数:
uri- 要转换的 URI- 返回:
-
结果
Path - 抛出:
IllegalArgumentException- 如果uri参数的先决条件不成立。 URI 的格式是特定于提供者的。FileSystemNotFoundException- 由 URI 标识的文件系统不存在且无法自动创建,或者未安装由 URI 的方案组件标识的提供程序SecurityException- 如果安装了安全管理器并且它拒绝访问文件系统的未指定权限- 自从:
- 11
-
getFileSystem
FileSystem getFileSystem()返回创建此对象的文件系统。- 返回:
- 创建此对象的文件系统
-
isAbsolute
boolean isAbsolute()判断此路径是否是绝对路径。绝对路径是完整的,因为它不需要与其他路径信息结合来定位文件。
- 返回:
true当且仅当此路径是绝对路径
-
getRoot
Path getRoot()返回此路径的根组件作为Path对象,或null如果此路径没有根组件。- 返回:
-
表示此路径的根组件的路径,或
null
-
getFileName
Path getFileName()返回此路径表示的文件或目录的名称作为Path对象。文件名是目录层次结构中根部的 farthest 元素。- 返回:
-
表示文件或目录名称的路径,如果此路径有零个元素,则为
null
-
getParent
Path getParent()如果此路径没有父级,则返回 parent path 或null。此路径对象的父级由此路径的根组件(如果有)和路径中的每个元素组成,但目录层次结构中根目录中的 farthest 除外。该方法不访问文件系统;路径或其父路径可能不存在。此外,此方法不会消除特殊名称,例如“.”。和“..”可以在某些实现中使用。例如,在 UNIX 上,“
/a/b/c”的父级是“/a/b”,"x/y/.的父级是“x/y”。对于需要 shell-like 导航的情况,此方法可以与normalize方法一起使用,以消除冗余名称。如果此路径有多个元素,并且没有根组件,则此方法等效于计算表达式:
subpath(0, getNameCount()-1);
- 返回:
- 表示路径父级的路径
-
getNameCount
int getNameCount()返回路径中名称元素的数量。- 返回:
-
路径中的元素数,如果此路径仅表示根组件,则为
0
-
getName
将此路径的名称元素作为Path对象返回。index参数是要返回的名称元素的索引。目录层次结构中 closest 到根的元素具有索引0。来自根的 farthest 元素的索引为count-1。- 参数:
index- 元素的索引- 返回:
- 名称元素
- 抛出:
IllegalArgumentException- 如果index为负,则index大于或等于元素数,或者此路径的名称元素为零
-
subpath
返回一个相对的Path,它是此路径的名称元素的子序列。beginIndex和endIndex参数指定名称元素的子序列。 closest 到目录层次结构中根目录的名称具有索引0。来自根的 farthest 的名称具有索引count-1。返回的Path对象具有从beginIndex开始并扩展到索引endIndex-1处的元素的名称元素。- 参数:
beginIndex- 第一个元素的索引,包括在内endIndex- 最后一个元素的索引,独占- 返回:
-
一个新的
Path对象,它是此Path中名称元素的子序列 - 抛出:
IllegalArgumentException- 如果beginIndex为负数,或者大于或等于元素数。如果endIndex小于或等于beginIndex,或大于元素数。
-
startsWith
测试此路径是否以给定路径开头。此路径 starts 与给定路径如果此路径的根组件 starts 具有给定路径的根组件,并且此路径以与给定路径相同的名称元素开头。如果给定路径的名称元素多于此路径,则返回
false。此路径的根组件是否以给定路径的根组件开头是特定于文件系统的。如果此路径没有根组件且给定路径有根组件,则此路径不以给定路径开头。
如果给定路径与此路径的不同
FileSystem关联,则返回false。- 参数:
other- 给定的路径- 返回:
true如果此路径以给定路径开始;否则false
-
startsWith
测试此路径是否以Path开头,通过转换给定的路径字符串构造,完全按照startsWith(Path)方法指定的方式。例如,在 UNIX 上,路径“foo/bar”以“foo”和“foo/bar”开头。它不以“f”或“fo”开头。- 实现要求:
-
此路径的默认实现等效于:
startsWith(getFileSystem().getPath(other)); - 参数:
other- 给定的路径字符串- 返回:
true如果此路径以给定路径开始;否则false- 抛出:
InvalidPathException- 如果路径字符串无法转换为路径。
-
endsWith
测试此路径是否以给定路径结尾。如果给定路径有 N 个元素,并且没有根组件,并且此路径有 N 个或更多元素,则如果每条路径的最后 N 个元素(从距根最远的元素开始)相等,则此路径以给定路径结束.
如果给定路径具有根组件,则如果此路径的根组件ends with给定路径的根组件,并且两条路径的相应元素相等,则此路径以给定路径结束。此路径的根组件是否以给定路径的根组件结尾是特定于文件系统的。如果此路径没有根组件并且给定路径有根组件,则此路径不会以给定路径结束。
如果给定路径与此路径的不同
FileSystem关联,则返回false。- 参数:
other- 给定的路径- 返回:
true如果此路径以给定路径结束;否则false
-
endsWith
测试此路径是否以Path结尾,通过转换给定的路径字符串构造,完全按照endsWith(Path)方法指定的方式。例如,在 UNIX 上,路径“foo/bar”以“foo/bar”和“bar”结尾。它不以“r”或“/bar”结尾。请注意,未考虑尾随分隔符,因此在Path“foo/bar”和String“bar/”上调用此方法返回true。- 实现要求:
-
此路径的默认实现等效于:
endsWith(getFileSystem().getPath(other)); - 参数:
other- 给定的路径字符串- 返回:
true如果此路径以给定路径结束;否则false- 抛出:
InvalidPathException- 如果路径字符串无法转换为路径。
-
normalize
Path normalize()返回一个路径,该路径是删除了冗余名称元素的路径。此方法的精确定义取决于实现,但通常它源自此路径,该路径不包含 redundant name 元素。在许多文件系统中,“
.”和“..”是用来表示当前目录和父目录的特殊名称。在这样的文件系统中,所有出现的“.”都被认为是多余的。如果“..”前面有一个非“..”名称,那么这两个名称都被认为是多余的(重复识别此类名称的过程,直到它不再适用)。该方法不访问文件系统;该路径可能找不到存在的文件。从路径中删除“
..”和前面的名称可能会导致路径找到与原始路径不同的文件。当前面的名称是符号链接时,就会出现这种情况。- 返回:
- 结果路径或此路径(如果它不包含冗余名称元素);如果此路径没有根组件且所有名称元素都是冗余的,则返回空路径
- 参见:
-
resolve
根据此路径解析给定路径。如果
other参数是absolute路径,则此方法通常会返回other。如果other是一个空路径然后这个方法平凡地返回这个路径。否则,此方法将此路径视为目录并根据此路径解析给定路径。在最简单的情况下,给定路径没有root组件,在这种情况下,此方法将 joins 给定路径转换为该路径,并返回与给定路径ends的结果路径。如果给定路径具有根组件,则解析高度依赖于实现,因此未指定。- 参数:
other- 解决此路径的路径- 返回:
- 结果路径
- 参见:
-
resolve
将给定的路径字符串转换为Path并按照resolve方法指定的方式针对此Path解析它。例如,假设名称分隔符是“/”,路径表示“foo/bar”,则使用路径字符串“gus”调用此方法将导致Path“foo/bar/gus”。- 实现要求:
-
此路径的默认实现等效于:
resolve(getFileSystem().getPath(other)); - 参数:
other- 根据此路径解析的路径字符串- 返回:
- 结果路径
- 抛出:
InvalidPathException- 如果路径字符串无法转换为路径。- 参见:
-
resolveSibling
根据此路径的parent路径解析给定路径。这在需要文件名的地方很有用更换用另一个文件名。例如,假设名称分隔符为“/”,路径表示“dir1/dir2/foo”,则使用Path“bar”调用此方法将导致Path“dir1/dir2/bar”。如果此路径没有父路径,或者other是absolute,则此方法返回other。如果other是空路径,则此方法返回此路径的父路径,或者如果此路径没有父路径,则返回空路径。- 实现要求:
-
此路径的默认实现等效于:
除非(getParent() == null) ? other : getParent().resolve(other);other == null,在这种情况下会抛出NullPointerException。 - 参数:
other- 针对此路径的父项解析的路径- 返回:
- 结果路径
- 参见:
-
resolveSibling
- 实现要求:
-
此路径的默认实现等效于:
resolveSibling(getFileSystem().getPath(other)); - 参数:
other- 要根据此路径的父项解析的路径字符串- 返回:
- 结果路径
- 抛出:
InvalidPathException- 如果路径字符串无法转换为路径。- 参见:
-
relativize
构造此路径和给定路径之间的相对路径。相对化是
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
-
toUri
URI toUri()返回表示此路径的 URI。此方法构造一个绝对
URI,其scheme等于标识提供者的 URI 方案。方案特定部分的确切形式高度依赖于提供者。在默认提供程序的情况下,URI 是分层的,具有绝对的
path组件。查询和片段组件未定义。是否定义权限组件取决于实现。无法保证URI可用于构建java.io.File。特别是,如果此路径表示通用命名约定 (UNC) 路径,则 UNC 服务名称可能会在生成的 URI 的授权组件中进行编码。在默认提供者的情况下,文件存在,并且可以确定文件是一个目录,那么得到的URI将以斜杠结尾。默认提供程序为
File类提供类似的 round-trip 保证。对于给定的Pathp保证
只要原来的Path.of(p.toUri()).equals(p.toAbsolutePath())Path、URI和新的Path都是在同一个 Java 虚拟机(可能是不同的调用)中创建的。其他提供商是否做出任何保证是提供商特定的,因此未指定。当构建一个文件系统来访问文件内容作为一个文件系统时,如果返回的 URI 表示文件系统中的给定路径,或者它表示一个编码封闭文件系统 URI 的 compound URI,则它是高度实现特定的.此版本中未定义复合 URI 的格式;这样的方案可能会在未来的版本中添加。
- 返回:
- 表示此路径的 URI
- 抛出:
IOError- 如果在获取绝对路径时发生 I/O 错误,或者构建文件系统以访问文件内容作为文件系统,并且无法获取封闭文件系统的 URISecurityException- 在默认提供程序的情况下,安装了安全管理器,toAbsolutePath方法会引发安全异常。
-
toAbsolutePath
Path toAbsolutePath()返回一个代表该路径绝对路径的Path对象。如果此路径已经是
absolute,则此方法仅返回此路径。否则,此方法以依赖于实现的方式解析路径,通常是通过针对文件系统默认目录解析路径。根据实现的不同,如果文件系统不可访问,此方法可能会引发 I/O 错误。- 返回:
-
代表绝对路径的
Path对象 - 抛出:
IOError- 如果发生 I/O 错误SecurityException- 在默认提供程序的情况下,安装了安全管理器,并且此路径不是绝对的,然后调用安全管理器的checkPropertyAccess方法来检查对系统属性user.dir的访问
-
toRealPath
返回现有文件的 real 路径。此方法的精确定义取决于实现,但通常它源自此路径,一个将
same文件定位为此路径的absolute路径,但名称元素表示目录和文件的实际名称。例如,如果文件系统上的文件名比较不区分大小写,则名称元素代表名称的实际大小写。此外,生成的路径删除了多余的名称元素。如果此路径是相对路径,则首先获取其绝对路径,就像调用
toAbsolutePath方法一样。options数组可用于指示如何处理符号链接。默认情况下,符号链接被解析为其最终目标。如果存在选项NOFOLLOW_LINKS,则此方法不会解析符号链接。某些实现允许使用特殊名称(例如“..”)来引用父目录。当派生 real path 并且“..”(或等效)前面有一个非“..”名称时,实现通常会导致两个名称都被删除。当不解析符号链接并且前面的名称是符号链接时,只有在保证生成的路径将找到与此路径相同的文件时,才会删除这些名称。- 参数:
options- 指示如何处理符号链接的选项- 返回:
- 绝对路径表示此对象所在文件的real路径
- 抛出:
IOException- 如果文件不存在或发生 I/O 错误SecurityException- 在默认提供程序的情况下,并安装了安全管理器,调用其checkRead方法来检查对文件的读取访问权限,如果此路径不是绝对路径,则调用其checkPropertyAccess方法来检查对系统属性的访问权限user.dir
-
toFile
返回表示此路径的File对象。如果此Path与默认提供程序关联,则此方法等效于返回使用此路径的String表示构造的File对象。如果此路径是通过调用
FiletoPath方法创建的,则无法保证此方法返回的File对象是equal到原始File。- 实现要求:
-
此路径的默认实现等效于:
如果创建此new File(toString());Path的FileSystem是默认文件系统;否则抛出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参数指定 modifiers 来限定目录的注册方式。此版本未定义任何 standard 修饰符。它可能包含特定于实现的修饰符。如果文件通过符号链接注册到 watch 服务,那么如果 watch 在注册后继续依赖于符号链接的存在,则它是特定于实现的。
- 指定者:
register在接口Watchable中- 参数:
watcher- 此对象要注册到的监视服务events- 该对象应注册的事件modifiers- 修改对象注册方式的修饰符(如果有)- 返回:
- 表示此对象向给定监视服务注册的键
- 抛出:
UnsupportedOperationException- 如果指定了不支持的事件或修饰符IllegalArgumentException- 如果指定了无效的事件或修饰符组合ClosedWatchServiceException- 如果手表服务关闭NotDirectoryException- 如果文件已注册以查看目录中的条目并且文件不是目录(可选的特定例外)IOException- 如果发生 I/O 错误SecurityException- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead方法来检查对文件的读取访问权限。
-
register
向监视服务注册此路径所在的文件。此方法的调用与调用的行为完全相同
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中- 实现要求:
-
此路径的默认实现等效于:
register(watcher, events, new WatchEvent.Modifier[0]); - 参数:
watcher- 此对象要注册到的监视服务events- 该对象应注册的事件- 返回:
- 表示此对象向给定监视服务注册的键
- 抛出:
UnsupportedOperationException- 如果指定了不支持的事件IllegalArgumentException- 如果指定了无效的事件组合ClosedWatchServiceException- 如果手表服务关闭NotDirectoryException- 如果文件被注册为监视目录中的条目并且文件不是目录(可选的特定例外)IOException- 如果发生 I/O 错误SecurityException- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead方法来检查对文件的读取访问权限。
-
iterator
返回此路径的名称元素的迭代器。迭代器返回的第一个元素表示在目录层次结构中最接近根的名称元素,第二个元素次之,依此类推。返回的最后一个元素是此路径表示的文件或目录的名称。
root组件(如果存在)不会由迭代器返回。 -
compareTo
按字典顺序比较两个抽象路径。此方法定义的顺序是特定于提供者的,在默认提供者的情况下,是特定于平台的。此方法不访问文件系统,并且两个文件都不需要存在。此方法不能用于比较与不同文件系统提供程序关联的路径。
- 指定者:
compareTo在接口Comparable<Path>中- 参数:
other- 与此路径相比的路径。- 返回:
-
如果参数是此路径的
equal,则为零;如果此路径按字典顺序小于参数,则值小于零;如果此路径按字典顺序大于参数,则值大于零 - 抛出:
ClassCastException- 如果路径与不同的提供者相关联
-
equals
测试此路径是否与给定对象相等。如果给定对象不是 Path,或者是与不同
FileSystem关联的 Path,则此方法返回false。两条路径是否相等取决于文件系统的实现。在某些情况下,比较路径时不考虑大小写,而其他情况则区分大小写。该方法不访问文件系统,不需要文件存在。如果需要,可以使用
isSameFile方法来检查两个路径是否找到同一个文件。此方法满足
Object.equals方法的一般契约。 -
hashCode
int hashCode()计算此路径的哈希码。哈希码基于路径的组成部分,并满足
Object.hashCode方法的一般约定。 -
toString
String toString()
-