Class PathResolve

java.lang.Object
org.miaixz.bus.core.io.file.PathResolve
Direct Known Subclasses:
FileKit

public class PathResolve extends Object
NIO中Path对象操作封装
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    clean(Path path)
    清空目录
    static Path
    copy(InputStream src, Path target, CopyOption... options)
    通过JDK7+的 Files.copy(InputStream, Path, CopyOption...) 方法拷贝文件
    static long
    copy(Path src, OutputStream out)
    通过JDK7+的 Files.copy(InputStream, Path, CopyOption...) 方法拷贝文件
    static Path
    copy(Path src, Path target, CopyOption... options)
    复制src到target中 src路径和target路径相同时,不执行操作 src为文件,target为已存在目录,则拷贝到目录下,文件名不变。 src为文件,target为不存在路径,则目标以文件对待(自动创建父级目录),相当于拷贝后重命名,比如:/dest/aaa,如果aaa不存在,则aaa被当作文件名 src为文件,target是一个已存在的文件,则当CopyOption设为覆盖时会被覆盖,默认不覆盖,抛出FileAlreadyExistsException src为目录,target为已存在目录,整个src目录连同其目录拷贝到目标目录中 src为目录,target为不存在路径,则自动创建目标为新目录,并只拷贝src内容到目标目录中,相当于重命名目录。 src为目录,target为文件,抛出IllegalArgumentException
    static Path
    copy(Resource src, Path target, CopyOption... options)
    拷贝资源到目标文件 如果src为FileResource,调用文件拷贝。 其它,调用JDK7+的 Files.copy(InputStream, Path, CopyOption...)
    static Path
    copyContent(Path src, Path target, CopyOption... options)
    复制src的内容到target中 src路径和target路径相同时,不执行操作 src为文件,target为已存在目录,则拷贝到目录下,文件名不变。 src为文件,target为不存在路径,则目标以文件对待(自动创建父级目录),相当于拷贝后重命名,比如:/dest/aaa,如果aaa不存在,则aaa被当作文件名 src为文件,target是一个已存在的文件,则当CopyOption设为覆盖时会被覆盖,默认不覆盖,抛出FileAlreadyExistsException src为目录,target为已存在目录,整个src目录下的内容拷贝到目标目录中 src为目录,target为不存在路径,则自动创建目标为新目录,整个src目录下的内容拷贝到目标目录中,相当于重命名目录。 src为目录,target为文件,抛出IO异常
    static Path
    createTempFile(String prefix, String suffix, Path dir)
    创建临时文件
    static void
    del(Path path)
    删除文件或者文件夹,不追踪软链 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹 某个文件删除失败会终止删除操作
    static boolean
    equals(Path file1, Path file2)
    检查两个文件是否是同一个文件 所谓文件相同,是指Path对象是否指向同一个文件或文件夹
    static boolean
    exists(Path path, boolean isFollowLinks)
    判断文件或目录是否存在
    getAttributes(Path path, boolean isFollowLinks)
    获取文件属性
    getFileVisitOption(boolean isFollowLinks)
    构建是否追踪软链的选项
    获得输入流
    static Path
    获取指定位置的最后一个子路径部分
    static LinkOption[]
    getLinkOptions(boolean isFollowLinks)
    构建是否追踪软链的选项
    static String
    获得文件的MimeType
    static String
    getName(Path path)
    获取Path文件名
    获得输出流
    static Path
    getPathEle(Path path, int index)
    获取指定位置的子路径部分,支持负数,例如index为-1表示从后数第一个节点位置
    getReader(Path path, Charset charset)
    获得一个文件读取器
    获得一个文件读取器
    static boolean
    判断是否为目录,如果file为null,则返回false 此方法不会追踪到软链对应的真实地址,即软链被当作文件
    static boolean
    isDirectory(Path path, boolean isFollowLinks)
    判断是否为目录,如果file为null,则返回false
    static boolean
    isDirEmpty(Path dirPath)
    目录是否为空
    static boolean
    isExistsAndNotDirectory(Path path, boolean isFollowLinks)
    判断是否存在且为非目录 如果path为null,返回false 如果path不存在,返回false
    static boolean
    isFile(Path path, boolean isFollowLinks)
    判断是否为文件,如果file为null,则返回false
    static boolean
    isOther(Path path)
    判断是否为其它类型文件,即非文件、非目录、非链接。
    static boolean
    isSub(Path parent, Path sub)
    判断给定的目录是否为给定文件或文件夹的子目录
    static boolean
    判断是否为符号链接文件
    static List<File>
    loopFiles(Path path, int maxDepth, boolean isFollowLinks, FileFilter fileFilter)
    递归遍历目录以及子目录中的所有文件 如果提供path为文件,直接返回过滤结果
    static List<File>
    loopFiles(Path path, int maxDepth, FileFilter fileFilter)
    递归遍历目录以及子目录中的所有文件 如果提供path为文件,直接返回过滤结果
    static List<File>
    loopFiles(Path path, FileFilter fileFilter)
    递归遍历目录以及子目录中的所有文件 如果提供path为文件,直接返回过滤结果
    static Path
    mkdir(Path dir)
    创建所给目录及其父目录
    static Path
    创建所给文件或目录的父目录
    static Path
    move(Path src, Path target, boolean isOverride)
    移动文件或目录到目标中,例如: 如果src和target为同一文件或目录,直接返回target。 如果src为文件,target为目录,则移动到目标目录下,存在同名文件则按照是否覆盖参数执行。 如果src为文件,target为文件,则按照是否覆盖参数执行。 如果src为文件,target为不存在的路径,则重命名源文件到目标指定的文件,如moveContent("/a/b", "/c/d"), d不存在,则b变成d。 如果src为目录,target为文件,抛出IllegalArgumentException 如果src为目录,target为目录,则将源目录及其内容移动到目标路径目录中,如move("/a/b", "/c/d"),结果为"/c/d/b" 如果src为目录,target为不存在的路径,则重命名src到target,如move("/a/b", "/c/d"),结果为"/c/d/",相当于b重命名为d
    static Path
    moveContent(Path src, Path target, boolean isOverride)
    移动文件或目录内容到目标中,例如: 如果src为文件,target为目录,则移动到目标目录下,存在同名文件则按照是否覆盖参数执行。 如果src为文件,target为文件,则按照是否覆盖参数执行。 如果src为文件,target为不存在的路径,则重命名源文件到目标指定的文件,如moveContent("/a/b", "/c/d"), d不存在,则b变成d。 如果src为目录,target为文件,抛出IllegalArgumentException 如果src为目录,target为目录,则将源目录下的内容移动到目标路径目录中,源目录不删除。 如果src为目录,target为不存在的路径,则创建目标路径为目录,将源目录下的内容移动到目标路径目录中,源目录不删除。
    static Path
    of(String firstPath, String... paths)
    拼接多个路径
    static Path
    of(Path firstPath, Path... paths)
    拼接多个路径,
    static byte[]
    读取文件的所有内容为byte数组
    static Path
    rename(Path path, String newName, boolean isOverride)
    修改文件或目录的文件名,不变更路径,只是简单修改文件名
    static Path
    subPath(Path path, int fromIndex, int toIndex)
    获取指定位置的子路径部分,支持负数,例如起始为-1表示从后数第一个节点位置
    static Path
    将Path路径转换为标准的绝对路径 如果Path.isAbsolute()true,表示已经是绝对路径,返回本身 如果是相对路径,则返回相对于系统默认目录的路径(一般为项目路径)
    static Path
    获取实际路径,路径文件必须存在 如果给定Path是软链接(符号链接),则返回指向的实际链接 如果路径不存在,会直接抛出NoSuchFileException异常 无论给定是何种类型的路径,返回都是唯一的路径(总是equals)
    static void
    walkFiles(Path start, int maxDepth, boolean isFollowLinks, FileVisitor<? super Path> visitor)
    遍历指定path下的文件并做处理
    static void
    walkFiles(Path start, int maxDepth, FileVisitor<? super Path> visitor)
    遍历指定path下的文件并做处理
    static void
    walkFiles(Path start, FileVisitor<? super Path> visitor)
    遍历指定path下的文件并做处理

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • PathResolve

      public PathResolve()
  • Method Details

    • of

      public static Path of(String firstPath, String... paths)
      拼接多个路径
      Parameters:
      firstPath - 第一个路径
      paths - 其它路径
      Returns:
      拼接后的路径
      See Also:
    • of

      public static Path of(Path firstPath, Path... paths)
      拼接多个路径,
      Parameters:
      firstPath - 第一个路径
      paths - 其它路径
      Returns:
      拼接后的路径
    • isDirEmpty

      public static boolean isDirEmpty(Path dirPath)
      目录是否为空
      Parameters:
      dirPath - 目录
      Returns:
      是否为空
      Throws:
      InternalException - IOException
    • loopFiles

      public static List<File> loopFiles(Path path, FileFilter fileFilter)
      递归遍历目录以及子目录中的所有文件 如果提供path为文件,直接返回过滤结果
      Parameters:
      path - 当前遍历文件或目录
      fileFilter - 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录,null表示接收全部文件
      Returns:
      文件列表
    • loopFiles

      public static List<File> loopFiles(Path path, int maxDepth, FileFilter fileFilter)
      递归遍历目录以及子目录中的所有文件 如果提供path为文件,直接返回过滤结果
      Parameters:
      path - 当前遍历文件或目录
      maxDepth - 遍历最大深度,-1表示遍历到没有目录为止
      fileFilter - 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录,null表示接收全部文件
      Returns:
      文件列表
    • loopFiles

      public static List<File> loopFiles(Path path, int maxDepth, boolean isFollowLinks, FileFilter fileFilter)
      递归遍历目录以及子目录中的所有文件 如果提供path为文件,直接返回过滤结果
      Parameters:
      path - 当前遍历文件或目录
      maxDepth - 遍历最大深度,-1表示遍历到没有目录为止
      isFollowLinks - 是否跟踪软链(快捷方式)
      fileFilter - 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录,null表示接收全部文件
      Returns:
      文件列表
    • walkFiles

      public static void walkFiles(Path start, FileVisitor<? super Path> visitor)
      遍历指定path下的文件并做处理
      Parameters:
      start - 起始路径,必须为目录
      visitor - FileVisitor 接口,用于自定义在访问文件时,访问目录前后等节点做的操作
      See Also:
    • walkFiles

      public static void walkFiles(Path start, int maxDepth, FileVisitor<? super Path> visitor)
      遍历指定path下的文件并做处理
      Parameters:
      start - 起始路径,必须为目录
      maxDepth - 最大遍历深度,-1表示不限制深度
      visitor - FileVisitor 接口,用于自定义在访问文件时,访问目录前后等节点做的操作
      See Also:
    • walkFiles

      public static void walkFiles(Path start, int maxDepth, boolean isFollowLinks, FileVisitor<? super Path> visitor)
      遍历指定path下的文件并做处理
      Parameters:
      start - 起始路径,必须为目录
      maxDepth - 最大遍历深度,-1表示不限制深度
      isFollowLinks - 是否追踪到软链对应的真实地址
      visitor - FileVisitor 接口,用于自定义在访问文件时,访问目录前后等节点做的操作
      See Also:
    • del

      public static void del(Path path) throws InternalException
      删除文件或者文件夹,不追踪软链 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹 某个文件删除失败会终止删除操作
      Parameters:
      path - 文件对象
      Throws:
      InternalException - IO异常
    • clean

      public static void clean(Path path)
      清空目录
      Parameters:
      path - 目录路径
    • copy

      public static Path copy(Resource src, Path target, CopyOption... options) throws InternalException
      拷贝资源到目标文件
      Parameters:
      src - 源文件资源Resource实现
      target - 目标文件或目录,如果为目录使用与源文件相同的文件名
      options - StandardCopyOption
      Returns:
      目标Path
      Throws:
      InternalException - IO异常
    • copy

      public static Path copy(InputStream src, Path target, CopyOption... options) throws InternalException
      通过JDK7+的 Files.copy(InputStream, Path, CopyOption...) 方法拷贝文件
      Parameters:
      src - 源文件流,使用后不闭流
      target - 目标文件或目录,如果为目录使用与源文件相同的文件名
      options - StandardCopyOption
      Returns:
      目标Path
      Throws:
      InternalException - IO异常
    • copy

      public static long copy(Path src, OutputStream out) throws InternalException
      通过JDK7+的 Files.copy(InputStream, Path, CopyOption...) 方法拷贝文件
      Parameters:
      src - 源文件流,使用后不闭流
      out - 目标流
      Returns:
      拷贝bytes数
      Throws:
      InternalException - IO异常
    • copy

      public static Path copy(Path src, Path target, CopyOption... options) throws InternalException
      复制src到target中
      • src路径和target路径相同时,不执行操作
      • src为文件,target为已存在目录,则拷贝到目录下,文件名不变。
      • src为文件,target为不存在路径,则目标以文件对待(自动创建父级目录),相当于拷贝后重命名,比如:/dest/aaa,如果aaa不存在,则aaa被当作文件名
      • src为文件,target是一个已存在的文件,则当CopyOption设为覆盖时会被覆盖,默认不覆盖,抛出FileAlreadyExistsException
      • src为目录,target为已存在目录,整个src目录连同其目录拷贝到目标目录中
      • src为目录,target为不存在路径,则自动创建目标为新目录,并只拷贝src内容到目标目录中,相当于重命名目录。
      • src为目录,target为文件,抛出IllegalArgumentException
      Parameters:
      src - 源文件路径,如果为目录会在目标中创建新目录
      target - 目标文件或目录,如果为目录使用与源文件相同的文件名
      options - StandardCopyOption
      Returns:
      Path
      Throws:
      InternalException - IO异常
    • copyContent

      public static Path copyContent(Path src, Path target, CopyOption... options) throws InternalException
      复制src的内容到target中
      • src路径和target路径相同时,不执行操作
      • src为文件,target为已存在目录,则拷贝到目录下,文件名不变。
      • src为文件,target为不存在路径,则目标以文件对待(自动创建父级目录),相当于拷贝后重命名,比如:/dest/aaa,如果aaa不存在,则aaa被当作文件名
      • src为文件,target是一个已存在的文件,则当CopyOption设为覆盖时会被覆盖,默认不覆盖,抛出FileAlreadyExistsException
      • src为目录,target为已存在目录,整个src目录下的内容拷贝到目标目录中
      • src为目录,target为不存在路径,则自动创建目标为新目录,整个src目录下的内容拷贝到目标目录中,相当于重命名目录。
      • src为目录,target为文件,抛出IO异常
      Parameters:
      src - 源文件路径,如果为目录只在目标中创建新目录
      target - 目标目录,如果为目录使用与源文件相同的文件名
      options - StandardCopyOption
      Returns:
      Path
      Throws:
      InternalException - IO异常
    • isDirectory

      public static boolean isDirectory(Path path)
      判断是否为目录,如果file为null,则返回false 此方法不会追踪到软链对应的真实地址,即软链被当作文件
      Parameters:
      path - Path
      Returns:
      如果为目录true
    • isExistsAndNotDirectory

      public static boolean isExistsAndNotDirectory(Path path, boolean isFollowLinks)
      判断是否存在且为非目录
      • 如果path为null,返回false
      • 如果path不存在,返回false
      Parameters:
      path - Path
      isFollowLinks - 是否追踪到软链对应的真实地址
      Returns:
      如果为目录true
    • isDirectory

      public static boolean isDirectory(Path path, boolean isFollowLinks)
      判断是否为目录,如果file为null,则返回false
      Parameters:
      path - Path
      isFollowLinks - 是否追踪到软链对应的真实地址
      Returns:
      如果为目录true
    • getPathEle

      public static Path getPathEle(Path path, int index)
      获取指定位置的子路径部分,支持负数,例如index为-1表示从后数第一个节点位置
      Parameters:
      path - 路径
      index - 路径节点位置,支持负数(负数从后向前计数)
      Returns:
      获取的子路径
    • getLastPathEle

      public static Path getLastPathEle(Path path)
      获取指定位置的最后一个子路径部分
      Parameters:
      path - 路径
      Returns:
      获取的最后一个子路径
    • subPath

      public static Path subPath(Path path, int fromIndex, int toIndex)
      获取指定位置的子路径部分,支持负数,例如起始为-1表示从后数第一个节点位置
      Parameters:
      path - 路径
      fromIndex - 起始路径节点(包括)
      toIndex - 结束路径节点(不包括)
      Returns:
      获取的子路径
    • getAttributes

      public static BasicFileAttributes getAttributes(Path path, boolean isFollowLinks) throws InternalException
      获取文件属性
      Parameters:
      path - 文件路径Path
      isFollowLinks - 是否跟踪到软链对应的真实路径
      Returns:
      BasicFileAttributes
      Throws:
      InternalException - IO异常
    • getInputStream

      public static BufferedInputStream getInputStream(Path path) throws InternalException
      获得输入流
      Parameters:
      path - Path
      Returns:
      输入流
      Throws:
      InternalException - 文件未找到
    • getUtf8Reader

      public static BufferedReader getUtf8Reader(Path path) throws InternalException
      获得一个文件读取器
      Parameters:
      path - 文件Path
      Returns:
      BufferedReader对象
      Throws:
      InternalException - IO异常
    • getReader

      public static BufferedReader getReader(Path path, Charset charset) throws InternalException
      获得一个文件读取器
      Parameters:
      path - 文件Path
      charset - 字符集
      Returns:
      BufferedReader对象
      Throws:
      InternalException - IO异常
    • readBytes

      public static byte[] readBytes(Path path)
      读取文件的所有内容为byte数组
      Parameters:
      path - 文件
      Returns:
      byte数组
    • getOutputStream

      public static BufferedOutputStream getOutputStream(Path path) throws InternalException
      获得输出流
      Parameters:
      path - Path
      Returns:
      输入流
      Throws:
      InternalException - 文件未找到
    • rename

      public static Path rename(Path path, String newName, boolean isOverride)
      修改文件或目录的文件名,不变更路径,只是简单修改文件名
       FileKit.rename(file, "aaa.jpg", false) xx/xx.png = xx/aaa.jpg
       FileKit.rename(dir, "dir2", false) xx/xx/ = xx/dir2/
       
      Parameters:
      path - 被修改的文件
      newName - 新的文件名,包括扩展名
      isOverride - 是否覆盖目标文件
      Returns:
      目标文件Path
    • move

      public static Path move(Path src, Path target, boolean isOverride)
      移动文件或目录到目标中,例如:
      • 如果src和target为同一文件或目录,直接返回target。
      • 如果src为文件,target为目录,则移动到目标目录下,存在同名文件则按照是否覆盖参数执行。
      • 如果src为文件,target为文件,则按照是否覆盖参数执行。
      • 如果src为文件,target为不存在的路径,则重命名源文件到目标指定的文件,如moveContent("/a/b", "/c/d"), d不存在,则b变成d。
      • 如果src为目录,target为文件,抛出IllegalArgumentException
      • 如果src为目录,target为目录,则将源目录及其内容移动到目标路径目录中,如move("/a/b", "/c/d"),结果为"/c/d/b"
      • 如果src为目录,target为不存在的路径,则重命名src到target,如move("/a/b", "/c/d"),结果为"/c/d/",相当于b重命名为d
      Parameters:
      src - 源文件或目录路径
      target - 目标路径,如果为目录,则移动到此目录下
      isOverride - 是否覆盖目标文件
      Returns:
      目标文件Path
    • moveContent

      public static Path moveContent(Path src, Path target, boolean isOverride)
      移动文件或目录内容到目标中,例如:
      • 如果src为文件,target为目录,则移动到目标目录下,存在同名文件则按照是否覆盖参数执行。
      • 如果src为文件,target为文件,则按照是否覆盖参数执行。
      • 如果src为文件,target为不存在的路径,则重命名源文件到目标指定的文件,如moveContent("/a/b", "/c/d"), d不存在,则b变成d。
      • 如果src为目录,target为文件,抛出IllegalArgumentException
      • 如果src为目录,target为目录,则将源目录下的内容移动到目标路径目录中,源目录不删除。
      • 如果src为目录,target为不存在的路径,则创建目标路径为目录,将源目录下的内容移动到目标路径目录中,源目录不删除。
      Parameters:
      src - 源文件或目录路径
      target - 目标路径,如果为目录,则移动到此目录下
      isOverride - 是否覆盖目标文件
      Returns:
      目标文件Path
    • equals

      public static boolean equals(Path file1, Path file2) throws InternalException
      检查两个文件是否是同一个文件 所谓文件相同,是指Path对象是否指向同一个文件或文件夹
      Parameters:
      file1 - 文件1
      file2 - 文件2
      Returns:
      是否相同
      Throws:
      InternalException - IO异常
      See Also:
    • isFile

      public static boolean isFile(Path path, boolean isFollowLinks)
      判断是否为文件,如果file为null,则返回false
      Parameters:
      path - 文件
      isFollowLinks - 是否跟踪软链(快捷方式)
      Returns:
      如果为文件true
      See Also:
    • isSymlink

      public static boolean isSymlink(Path path)
      判断是否为符号链接文件
      Parameters:
      path - 被检查的文件
      Returns:
      是否为符号链接文件
    • isOther

      public static boolean isOther(Path path)
      判断是否为其它类型文件,即非文件、非目录、非链接。
      Parameters:
      path - 被检查的文件(非空)
      Returns:
      是否为其它类型文件
    • exists

      public static boolean exists(Path path, boolean isFollowLinks)
      判断文件或目录是否存在
      Parameters:
      path - 文件,null返回false
      isFollowLinks - 是否跟踪软链(快捷方式)
      Returns:
      是否存在
    • isSub

      public static boolean isSub(Path parent, Path sub)
      判断给定的目录是否为给定文件或文件夹的子目录
      Parameters:
      parent - 父目录
      sub - 子目录
      Returns:
      子目录是否为父目录的子目录
    • toAbsNormal

      public static Path toAbsNormal(Path path)
      将Path路径转换为标准的绝对路径 如果Path.isAbsolute()true,表示已经是绝对路径,返回本身 如果是相对路径,则返回相对于系统默认目录的路径(一般为项目路径)
      Parameters:
      path - 文件或目录Path
      Returns:
      转换后的Path
    • toRealPath

      public static Path toRealPath(Path path) throws InternalException
      获取实际路径,路径文件必须存在 如果给定Path是软链接(符号链接),则返回指向的实际链接 如果路径不存在,会直接抛出NoSuchFileException异常 无论给定是何种类型的路径,返回都是唯一的路径(总是equals)
      Parameters:
      path - 路径
      Returns:
      实际路径
      Throws:
      InternalException - IO异常,如文件不存在等
    • getMimeType

      public static String getMimeType(Path file)
      获得文件的MimeType
      Parameters:
      file - 文件
      Returns:
      MimeType
      See Also:
    • mkdir

      public static Path mkdir(Path dir)
      创建所给目录及其父目录
      Parameters:
      dir - 目录
      Returns:
      目录
    • mkParentDirs

      public static Path mkParentDirs(Path path)
      创建所给文件或目录的父目录
      Parameters:
      path - 文件或目录
      Returns:
      父目录
    • getName

      public static String getName(Path path)
      获取Path文件名
      Parameters:
      path - Path
      Returns:
      文件名
    • createTempFile

      public static Path createTempFile(String prefix, String suffix, Path dir) throws InternalException
      创建临时文件
      Parameters:
      prefix - 前缀,至少3个字符
      suffix - 后缀,如果null则使用默认.tmp
      dir - 临时文件创建的所在目录
      Returns:
      临时文件
      Throws:
      InternalException - IO异常
    • getLinkOptions

      public static LinkOption[] getLinkOptions(boolean isFollowLinks)
      构建是否追踪软链的选项
      Parameters:
      isFollowLinks - 是否追踪软链
      Returns:
      选项
    • getFileVisitOption

      public static Set<FileVisitOption> getFileVisitOption(boolean isFollowLinks)
      构建是否追踪软链的选项
      Parameters:
      isFollowLinks - 是否追踪软链
      Returns:
      选项