Module  java.base
软件包  java.nio.file

Interface Path

  • All Superinterfaces:
    Comparable<Path>Iterable<Path>Watchable


    public interface Path
    extends Comparable<Path>, Iterable<Path>, Watchable
    可用于在文件系统中定位文件的对象。 它通常表示系统相关的文件路径。

    A Path表示一个分层的路径,由一系列由特殊的分隔符或分隔符分隔的目录和文件名元素组成。 也可以存在标识文件系统层次结构的根组件 距离目录层次结构根目录最远的名称元素是文件或目录的名称。 其他名称元素是目录名称。 A Path可以表示根,根和序列的名称,或简单的一个或多个名称元素。 如果一个Path仅由一个空的名称元素组成,则认为是一个空的路径 使用空路径访问文件等同于访问文件系统的默认目录。 Path定义getFileNamegetParentgetRootsubpath方法来访问路径部件或它的名称元素的子序列。

    除了访问路径的组件之外, Path还定义了resolveresolveSibling方法来组合路径。 可用于构建两个路径之间的相对路径的relativize方法。 路径可以是compared ,并使用startsWithendsWith方法相互测试。

    此接口扩展了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方法是有用的构建FileString一个的表示Path

    并发

    该接口的实现是不可变且安全的,可供多个并发线程使用。

    从以下版本开始:
    1.7
    另请参见:
    Paths
    • 方法详细信息

      • 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 ,它是该路径的名称元素的子序列。

        beginIndexendIndex参数指定名称元素的子序列。 目录层次结构中最靠近根目录的名称具有索引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/barfoo/bar 它不以“ f ”或“ fofo
        实现要求:
        默认实现与以下路径相当:
           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 ”和“ barbar 它不以“ r ”或“ /bar/bar 请注意,尾部分隔符不被考虑,因此在Pathfoo/barStringbar/ ”返回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 ”调用此方法将导致Pathfoo/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 ”,则使用Pathbar ”调用此方法将导致Pathdir1/dir2/bar ”。 如果此路径没有父路径,或otherabsolute ,则此方法返回other 如果other是一个空的路径,那么这个方法返回这个路径的父,或者这个路径没有父,空的路径。
        实现要求:
        默认实现与以下路径相当:
           (getParent() == null) ? other : getParent().resolve(other);  
        除非是other == null ,在这种情况下抛出一个NullPointerException
        参数
        other - 解决此路径父 other的路径
        结果
        结果路径
        另请参见:
        resolve(Path)
      • relativize

        Path relativize​(Path other)
        构造此路径和给定路径之间的相对路径。

        相对论是resolution的倒数。 该方法试图以构建relative路径,当resolved针对此路径,产生用于定位相同的文件中给定的路径的路径。 例如,在UNIX上,如果此路径为"/a/b" ,给定路径为"/a/b/c/d"则生成的相对路径为"c/d" 在此路径和给定路径中没有一个root组件的情况下,可以构建一个相对路径。 如果只有一个路径具有根组件,则不能构造相对路径。 如果两个路径都有一个根组件,那么如果可以构造一个相对路径,那么它是依赖于实现的。 如果此路径和给定路径为equal则返回空路径

        对于任何两个normalized路径pq ,其中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参数是要注册的事件,可能包含以下事件:

        这些事件的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组件(如果存在)不由迭代器返回。

        Specified by:
        iterator在接口 Iterable<Path>
        实现要求:
        默认实现返回一个 Iterator<Path> ,对于该路径, Path遍历 Path返回的 getName(index) ,其中 index范围从零到 getNameCount() - 1 (包括)。
        结果
        这个路径的名称元素的迭代器。
      • compareTo

        int compareTo​(Path other)
        比较两个抽象的路径词典。 由此方法定义的排序是提供者特定的,在默认提供程序的情况下,具体为平台。 此方法不访问文件系统,并且都不需要文件存在。

        该方法可能不用于比较与不同文件系统提供程序相关联的路径。

        Specified by:
        compareTo在接口 Comparable<Path>
        参数
        other - 与此路径相比的路径。
        结果
        如果参数为该路径的 equal ,则为零,如果此路径在字典上小于参数,则该值小于零,或者如果该路径在字典上大于参数,则该值大于零
        异常
        ClassCastException - 如果路径与不同的提供者相关联
      • equals

        boolean equals​(Object other)
        测试此路径与给定对象的相等性。

        如果给定的对象不是路径,或者是与不同的FileSystem相关联的路径,则此方法返回false

        两条路径是否相等取决于文件系统的实现。 在某些情况下,不考虑情况比较路径,而其他路径是区分大小写的。 该方法不访问文件系统,并且不需要该文件。 如果需要,可以使用isSameFile方法来检查两个路径是否找到相同的文件。

        该方法满足Object.equals方法的一般合同。

        重写:
        equalsObject
        参数
        other - 要比较此对象的对象
        结果
        true如果,并且只有当给定的对象是一个 PathPath相同
        另请参见:
        Object.hashCode()HashMap
      • toString

        String toString​()
        返回此路径的字符串表示形式。

        如果通过使用getPath方法转换路径字符串创建此路径,则此方法返回的路径字符串可能与用于创建路径的原始String不同。

        返回的路径字符串使用默认名称separator来分隔路径中的名称。

        重写:
        toStringObject
        结果
        该路径的字符串表示形式