Module java.base
Package java.nio.file

Class Files

java.lang.Object
java.nio.file.Files

public final class Files extends Object
这个类仅包含操作文件、目录或其他类型文件的静态方法。

在大多数情况下,这里定义的方法将委托给相关的文件系统提供程序来执行文件操作。

自从:
1.7
  • Method Details

    • newInputStream

      public static InputStream newInputStream(Path path, OpenOption... options) throws IOException
      打开文件,返回一个输入流以从文件中读取。该流不会被缓冲,并且不需要支持markreset方法。该流对多个并发线程访问是安全的。读取从文件的开头开始。返回的流是否异步可关闭和/或可中断高度取决于文件系统提供程序的具体实现,因此未指定。

      options参数确定如何打开文件。如果没有选项,则等效于使用READ选项打开文件。除了READ选项外,实现还可以支持其他特定于实现的选项。

      参数:
      path - 要打开的文件的路径
      options - 指定如何打开文件的选项
      返回:
      一个新的输入流
      抛出:
      IllegalArgumentException - 如果指定了无效的选项组合
      UnsupportedOperationException - 如果指定了不支持的选项
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead方法来检查对文件的读取访问权限。
    • newOutputStream

      public static OutputStream newOutputStream(Path path, OpenOption... options) throws IOException
      打开或创建文件,返回一个输出流,可用于向文件中写入字节。生成的流不会被缓冲。该流对多个并发线程访问是安全的。返回的流是否异步可关闭和/或可中断高度取决于文件系统提供程序的具体实现,因此未指定。

      此方法以与newByteChannel方法指定的方式打开或创建文件,唯一的区别是数组中可能不包含READ选项。如果没有选项,则此方法的工作方式就像存在CREATETRUNCATE_EXISTINGWRITE选项一样。换句话说,它以写入模式打开文件,如果文件不存在,则创建文件,或者如果存在一个初始大小为0的现有regular-file,则将其截断。

      使用示例:

          Path path = ...
      
          // 截断并覆盖现有文件,或者如果文件最初不存在则创建文件
          OutputStream out = Files.newOutputStream(path);
      
          // 追加到现有文件,如果文件不存在则失败
          out = Files.newOutputStream(path, APPEND);
      
          // 追加到现有文件,如果文件最初不存在则创建文件
          out = Files.newOutputStream(path, CREATE, APPEND);
      
          // 总是创建新文件,如果已存在则失败
          out = Files.newOutputStream(path, CREATE_NEW);
      
      参数:
      path - 要打开或创建的文件的路径
      options - 指定文件如何打开的选项
      返回:
      一个新的输出流
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      UnsupportedOperationException - 如果指定了不支持的选项
      FileAlreadyExistsException - 如果同名文件已经存在并且指定了CREATE_NEW选项 (可选的具体异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
    • newByteChannel

      public static SeekableByteChannel newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException
      打开或创建文件,返回一个可寻址的字节通道以访问文件。

      options参数确定文件如何打开。READWRITE选项确定文件是否应该用于读取和/或写入。如果既没有选项(或APPEND选项),则文件将被打开以供读取。默认情况下,读取或写入从文件开头开始。

      除了READWRITE之外,还可以存在以下选项:

      选项
      选项 描述
      APPEND 如果存在此选项,则文件将被打开以供写入,并且每次调用通道的write方法都会先将位置移动到文件末尾,然后写入请求的数据。位置的移动和数据的写入是否在单个原子操作中完成取决于系统,因此未指定。此选项不能与READTRUNCATE_EXISTING选项一起使用。
      TRUNCATE_EXISTING 如果存在此选项,则现有文件将被截断为0字节。当文件仅用于读取时,此选项将被忽略。
      CREATE_NEW 如果存在此选项,则将创建一个新文件,如果文件已经存在或是符号链接,则操作将失败。在创建文件时,对文件的存在性检查和文件的创建(如果文件不存在)是原子操作,与其他文件系统操作一致。当文件仅用于读取时,此选项将被忽略。
      CREATE 如果存在此选项,则如果存在文件,则打开现有文件,否则创建新文件。如果同时存在CREATE_NEW选项或文件仅用于读取,则将忽略此选项。
      DELETE_ON_CLOSE 如果存在此选项,则在close方法关闭文件时,实现将尽力删除文件。如果未调用close方法,则在Java虚拟机终止时将尽力删除文件。
      SPARSE 在创建新文件时,此选项是新文件将是稀疏的提示。当不创建新文件时,将忽略此选项。
      SYNC 要求将对文件内容或元数据的每次更新同步写入底层存储设备。(参见同步I/O文件完整性)。
      DSYNC 要求将文件内容的每次更新同步写入底层存储设备。(参见同步I/O文件完整性)。

      实现还可以支持其他特定于实现的选项。

      attrs参数是可选的文件属性列表,在创建新文件时原子设置。

      在默认提供程序的情况下,返回的可寻址字节通道是一个FileChannel

      使用示例:

          Path path = ...
      
          // 打开文件以供读取
          ReadableByteChannel rbc = Files.newByteChannel(path, EnumSet.of(READ)));
      
          // 打开文件以供写入到现有文件的末尾,如果文件不存在则创建文件
          WritableByteChannel wbc = Files.newByteChannel(path, EnumSet.of(CREATE,APPEND));
      
          // 创建具有初始权限的文件,打开文件以供读取和写入
          FileAttribute<Set<PosixFilePermission>> perms = ...
          SeekableByteChannel sbc =
              Files.newByteChannel(path, EnumSet.of(CREATE_NEW,READ,WRITE), perms);
      
      参数:
      path - 要打开或创建的文件的路径
      options - 指定文件如何打开的选项
      attrs - 创建文件时要原子设置的可选文件属性列表
      返回:
      一个新的可寻址字节通道
      抛出:
      IllegalArgumentException - 如果集合包含无效的选项组合
      UnsupportedOperationException - 如果指定了不支持的打开选项或数组包含无法在创建文件时原子设置的属性
      FileAlreadyExistsException - 如果同名文件已经存在并且指定了CREATE_NEW选项并且文件正在被打开以供写入 (可选的具体异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对路径的读访问权限(如果文件用于读取)。如果文件用于写入,则会调用checkWrite方法来检查对路径的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
      参见:
    • newByteChannel

      public static SeekableByteChannel newByteChannel(Path path, OpenOption... options) throws IOException
      打开或创建文件,返回一个可寻址的字节通道以访问文件。

      此方法以newByteChannel方法指定的方式打开或创建文件。

      参数:
      path - 要打开或创建的文件的路径
      options - 指定文件如何打开的选项
      返回:
      一个新的可寻址的字节通道
      抛出:
      IllegalArgumentException - 如果集合包含无效的选项组合
      UnsupportedOperationException - 如果指定了不支持的打开选项
      FileAlreadyExistsException - 如果同名文件已经存在,并且指定了CREATE_NEW选项并且文件正在以写入模式打开时 (可选的特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则如果文件以读取模式打开,则会调用checkRead方法来检查对路径的读取访问权限。如果文件以写入模式打开,则会调用checkWrite方法来检查对路径的写入访问权限。如果文件以DELETE_ON_CLOSE选项打开,则会调用checkDelete方法来检查删除访问权限。
      参见:
    • newDirectoryStream

      public static DirectoryStream<Path> newDirectoryStream(Path dir) throws IOException
      打开一个目录,返回一个用于遍历目录中所有条目的DirectoryStream。目录流的iterator返回的元素是Path类型,每个代表目录中的一个条目。获取的Path对象就好像通过将目录条目的名称与dir解析得到的一样。

      当不使用try-with-resources结构时,应在迭代完成后调用目录流的close方法,以释放为打开目录保留的任何资源。

      当实现支持在目录中的条目上以无竞争方式执行操作时,返回的目录流是一个SecureDirectoryStream

      参数:
      dir - 目录的路径
      返回:
      一个新的打开的DirectoryStream对象
      抛出:
      NotDirectoryException - 如果文件因为不是目录而无法打开 (可选的特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对目录的读取访问权限。
    • newDirectoryStream

      public static DirectoryStream<Path> newDirectoryStream(Path dir, String glob) throws IOException
      打开一个目录,返回一个用于遍历目录中所有条目的DirectoryStream。目录流的iterator返回的元素是Path类型,每个代表目录中的一个条目。获取的Path对象就好像通过将目录条目的名称与dir解析得到的一样。迭代器返回的条目通过匹配其文件名的String表示与给定的globbing模式进行过滤。

      例如,假设我们想要遍历以".java"结尾的文件:

          Path dir = ...
          try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.java")) {
              :
          }
      

      通配符模式由getPathMatcher方法指定。

      当不使用try-with-resources结构时,应在迭代完成后调用目录流的close方法,以释放为打开目录保留的任何资源。

      当实现支持在目录中的条目上以无竞争方式执行操作时,返回的目录流是一个SecureDirectoryStream

      参数:
      dir - 目录的路径
      glob - glob模式
      返回:
      一个新的打开的DirectoryStream对象
      抛出:
      PatternSyntaxException - 如果模式无效
      NotDirectoryException - 如果文件因为不是目录而无法打开 (可选的特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对目录的读取访问权限。
    • newDirectoryStream

      public static DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) throws IOException
      打开一个目录,返回一个用于遍历目录中所有条目的DirectoryStream。目录流的iterator返回的元素是Path类型,每个代表目录中的一个条目。获取的Path对象就好像通过将目录条目的名称与dir解析得到的一样。迭代器返回的条目通过给定的filter进行过滤。

      当不使用try-with-resources结构时,应在迭代完成后调用目录流的close方法,以释放为打开目录保留的任何资源。

      当过滤器由于未捕获的错误或运行时异常而终止时,它会传播到hasNextnext方法。当抛出IOException时,会导致hasNextnext方法抛出一个带有IOException作为原因的DirectoryIteratorException

      当实现支持在目录中的条目上以无竞争方式执行操作时,返回的目录流是一个SecureDirectoryStream

      使用示例: 假设我们想要遍历目录中大于8K的文件。

          DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
              public boolean accept(Path file) throws IOException {
                  return (Files.size(file) > 8192L);
              }
          };
          Path dir = ...
          try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, filter)) {
              :
          }
      
      参数:
      dir - 目录的路径
      filter - 目录流过滤器
      返回:
      一个新的打开的DirectoryStream对象
      抛出:
      NotDirectoryException - 如果文件因为不是目录而无法打开 (可选的特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对目录的读取访问权限。
    • createFile

      public static Path createFile(Path path, FileAttribute<?>... attrs) throws IOException
      创建一个新的空文件,如果文件已经存在则失败。对文件的存在性检查和如果文件不存在则创建新文件的操作是一个原子操作,与可能影响目录的所有其他文件系统活动一样。

      attrs参数是可选的file-attributes,用于在创建文件时进行原子设置。每个属性由其name标识。如果数组中包含同名属性超过一个,则除最后一个之外的所有属性都将被忽略。

      参数:
      path - 要创建的文件的路径
      attrs - 在创建文件时要原子设置的可选文件属性列表
      返回:
      文件
      抛出:
      UnsupportedOperationException - 如果数组包含无法在创建文件时原子设置的属性
      FileAlreadyExistsException - 如果同名文件已经存在 (可选特定异常)
      IOException - 如果发生I/O错误或父目录不存在
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用 checkWrite 方法来检查对新文件的写访问权限。
    • createDirectory

      public static Path createDirectory(Path dir, FileAttribute<?>... attrs) throws IOException
      创建一个新目录。检查文件是否存在以及如果不存在则创建目录的操作是原子操作,与可能影响目录的所有其他文件系统活动一起。应该使用 createDirectories 方法,以便首先创建所有不存在的父目录。

      参数 attrs 是可选的 文件属性,在创建目录时要原子设置。每个属性由其 名称 标识。如果数组中包含同名属性,则除最后一个出现外,其余属性将被忽略。

      参数:
      dir - 要创建的目录
      attrs - 在创建目录时要原子设置的可选文件属性列表
      返回:
      目录
      抛出:
      UnsupportedOperationException - 如果数组包含无法在创建目录时原子设置的属性
      FileAlreadyExistsException - 如果因同名文件已经存在而无法创建目录 (可选特定异常)
      IOException - 如果发生I/O错误或父目录不存在
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用 checkWrite 方法来检查对新目录的写访问权限。
    • createDirectories

      public static Path createDirectories(Path dir, FileAttribute<?>... attrs) throws IOException
      通过首先创建所有不存在的父目录来创建目录。与 createDirectory 方法不同,如果无法创建目录因为它已经存在,则不会抛出异常。

      参数 attrs 是可选的 文件属性,在创建不存在的目录时要原子设置。每个文件属性由其 名称 标识。如果数组中包含同名属性,则除最后一个出现外,其余属性将被忽略。

      如果此方法失败,则可能在创建一些但不是所有父目录后失败。

      参数:
      dir - 要创建的目录
      attrs - 在创建目录时要原子设置的可选文件属性列表
      返回:
      目录
      抛出:
      UnsupportedOperationException - 如果数组包含无法在创建目录时原子设置的属性
      FileAlreadyExistsException - 如果 dir 存在但不是目录 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则在尝试创建目录及检查每个已检查的父目录时会调用 checkWrite 方法。如果 dir 不是绝对路径,则可能需要调用其 toAbsolutePath 来获取其绝对路径。这可能会调用安全管理器的 checkPropertyAccess 方法来检查对系统属性 user.dir 的访问权限。
    • createTempFile

      public static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) throws IOException
      在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。生成的 Path 与给定目录使用相同的 FileSystem 关联。

      文件名的构造方式是实现相关的,因此未指定。在可能的情况下,prefixsuffix 被用于以与 File.createTempFile(String,String,File) 方法相同的方式构造候选名称。

      File.createTempFile 方法一样,此方法仅用作临时文件设施的一部分。当作为 工作文件 使用时,生成的文件可以使用 DELETE_ON_CLOSE 选项打开,以便在调用适当的 close 方法时删除文件。或者,可以使用 shutdown-hookFile.deleteOnExit() 机制自动删除文件。

      参数 attrs 是可选的 文件属性,在创建文件时要原子设置。每个属性由其 名称 标识。如果数组中包含同名属性,则除最后一个出现外,其余属性将被忽略。当未指定文件属性时,生成的文件可能比 File.createTempFile(String,String,File) 方法创建的文件具有更严格的访问权限。

      参数:
      dir - 要在其中创建文件的目录路径
      prefix - 用于生成文件名称的前缀字符串;可以为 null
      suffix - 用于生成文件名称的后缀字符串;可以为 null,在这种情况下将使用 ".tmp"
      attrs - 在创建文件时要原子设置的可选文件属性列表
      返回:
      在调用此方法之前不存在的新创建文件的路径
      抛出:
      IllegalArgumentException - 如果无法使用前缀或后缀参数生成候选文件名
      UnsupportedOperationException - 如果数组包含无法在创建目录时原子设置的属性
      IOException - 如果发生I/O错误或 dir 不存在
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用 checkWrite 方法来检查对文件的写访问权限。
    • createTempFile

      public static Path createTempFile(String prefix, String suffix, FileAttribute<?>... attrs) throws IOException
      在默认临时文件目录中使用给定的前缀和后缀生成一个空文件的名称。生成的 Path 与默认 FileSystem 关联。

      如果 dir 参数是临时文件目录,则此方法的工作方式与 createTempFile(Path,String,String,FileAttribute[]) 方法指定的方式完全相同。

      参数:
      prefix - 用于生成文件名的前缀字符串;可以为null
      suffix - 用于生成文件名的后缀字符串;可以为null,在这种情况下将使用".tmp"
      attrs - 创建文件时要原子设置的可选文件属性列表
      返回:
      在调用此方法之前不存在的新创建文件的路径
      抛出:
      IllegalArgumentException - 如果无法使用前缀或后缀参数生成候选文件名
      UnsupportedOperationException - 如果数组包含无法在创建目录时原子设置的属性
      IOException - 如果发生I/O错误或临时文件目录不存在
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。
    • createTempDirectory

      public static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs) throws IOException
      在指定目录中创建一个新目录,使用给定的前缀生成其名称。生成的Path与给定目录关联的FileSystem相同。

      关于如何构造目录名称的详细信息取决于实现,因此未指定。在可能的情况下,使用prefix来构造候选名称。

      createTempFile方法一样,此方法仅是临时文件设施的一部分。可以使用shutdown-hookFile.deleteOnExit()机制自动删除目录。

      attrs参数是可选的文件属性,用于在创建目录时进行原子设置。每个属性由其名称标识。如果数组中包含同名属性超过一个,则除最后一个外,其余均被忽略。

      参数:
      dir - 要在其中创建目录的目录路径
      prefix - 用于生成目录名称的前缀字符串;可以为null
      attrs - 创建目录时要原子设置的可选文件属性列表
      返回:
      在调用此方法之前不存在的新创建目录的路径
      抛出:
      IllegalArgumentException - 如果无法使用前缀生成候选目录名称
      UnsupportedOperationException - 如果数组包含无法在创建目录时原子设置的属性
      IOException - 如果发生I/O错误或dir不存在
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查创建目录时的写访问权限。
    • createTempDirectory

      public static Path createTempDirectory(String prefix, FileAttribute<?>... attrs) throws IOException
      在默认临时文件目录中创建一个新目录,使用给定前缀生成其名称。生成的Path与默认FileSystem关联。

      如果dir参数是临时文件目录,则此方法的工作方式与createTempDirectory(Path,String,FileAttribute[])方法指定的方式完全相同。

      参数:
      prefix - 用于生成目录名称的前缀字符串;可以为null
      attrs - 创建目录时要原子设置的可选文件属性列表
      返回:
      在调用此方法之前不存在的新创建目录的路径
      抛出:
      IllegalArgumentException - 如果无法使用前缀生成候选目录名称
      UnsupportedOperationException - 如果数组包含无法在创建目录时原子设置的属性
      IOException - 如果发生I/O错误或临时文件目录不存在
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查创建目录时的写访问权限。
    • createSymbolicLink

      public static Path createSymbolicLink(Path link, Path target, FileAttribute<?>... attrs) throws IOException
      创建到目标的符号链接(可选操作)

      target参数是链接的目标。它可以是绝对或相对路径,可能不存在。当目标是相对路径时,结果链接上的文件系统操作是相对于链接的路径的。

      attrs参数是可选的属性,用于在创建链接时进行原子设置。每个属性由其名称标识。如果数组中包含同名属性超过一个,则除最后一个外,其余均被忽略。

      如果支持符号链接,但底层FileStore不支持符号链接,则可能会因IOException而失败。此外,一些操作系统可能要求使用实现特定的权限启动Java虚拟机以创建符号链接,在这种情况下,此方法可能会抛出IOException

      参数:
      link - 要创建符号链接的路径
      target - 符号链接的目标
      attrs - 在创建符号链接时要原子设置的属性数组
      返回:
      符号链接的路径
      抛出:
      UnsupportedOperationException - 如果实现不支持符号链接或数组包含无法在创建符号链接时原子设置的属性
      FileAlreadyExistsException - 如果已存在同名文件 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,它会拒绝LinkPermission("symbolic")或其checkWrite方法拒绝对符号链接路径的写访问权限。
    • createLink

      public static Path createLink(Path link, Path existing) throws IOException
      为现有文件创建一个新链接(目录条目)(可选操作)

      link参数定位要创建的目录条目。 existing参数是指向现有文件的路径。此方法为文件创建一个新的目录条目,以便可以使用link作为路径访问该文件。在某些文件系统中,这称为创建“硬链接”。文件属性是为文件还是为每个目录条目维护的,这取决于文件系统,因此未指定。通常,文件系统要求文件的所有链接(目录条目)都在同一文件系统上。此外,在某些平台上,Java虚拟机可能需要以实现特定的权限启动才能创建硬链接或创建到目录的链接。

      参数:
      link - 要创建的链接(目录条目)
      existing - 指向现有文件的路径
      返回:
      链接(目录条目)的路径
      抛出:
      UnsupportedOperationException - 如果实现不支持将现有文件添加到目录中
      FileAlreadyExistsException - 如果由于同名文件已存在而无法创建条目 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,它会拒绝LinkPermission("hard")或其checkWrite方法拒绝对链接或现有文件的写访问权限。
    • delete

      public static void delete(Path path) throws IOException
      删除文件。

      实现可能需要检查文件以确定文件是否为目录。因此,该方法可能与其他文件系统操作不是原子的。如果文件是符号链接,则删除的是符号链接本身,而不是链接的最终目标。

      如果文件是目录,则目录必须为空。在某些实现中,目录在创建时会有特殊文件或链接的条目。在这种实现中,只有特殊条目存在时,目录被视为空。此方法可与walkFileTree方法一起使用,以删除目录及目录中的所有条目,或者在需要时删除整个文件树

      在某些操作系统上,当文件被Java虚拟机或其他程序打开并使用时,可能无法删除文件。

      参数:
      path - 要删除的文件的路径
      抛出:
      NoSuchFileException - 如果文件不存在 (可选特定异常)
      DirectoryNotEmptyException - 如果文件是目录且由于目录不为空而无法删除 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用SecurityManager.checkDelete(String)方法来检查对文件的删除访问权限
    • deleteIfExists

      public static boolean deleteIfExists(Path path) throws IOException
      如果存在,则删除文件。 delete(Path)方法一样,实现可能需要检查文件以确定文件是否为目录。因此,该方法可能与其他文件系统操作不是原子的。如果文件是符号链接,则删除的是符号链接本身,而不是链接的最终目标。

      如果文件是目录,则目录必须为空。在某些实现中,目录在创建时会有特殊文件或链接的条目。在这种实现中,只有特殊条目存在时,目录被视为空。

      在某些操作系统上,当文件被Java虚拟机或其他程序打开并使用时,可能无法删除文件。

      参数:
      path - 要删除的文件的路径
      返回:
      如果此方法删除了文件,则true; 如果文件不存在,则false
      抛出:
      DirectoryNotEmptyException - 如果文件是目录且由于目录不为空而无法删除 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用SecurityManager.checkDelete(String)方法来检查对文件的删除访问权限。
    • copy

      public static Path copy(Path source, Path target, CopyOption... options) throws IOException
      将文件复制到目标文件。

      此方法使用options参数将文件复制到目标文件,指定复制方式。默认情况下,如果目标文件已存在或是符号链接,则复制将失败,除非源文件和目标文件是相同文件,在这种情况下,方法将在不复制文件的情况下完成。不需要将文件属性复制到目标文件。如果支持符号链接,并且文件是符号链接,则将复制链接的最终目标。如果文件是目录,则在目标位置创建一个空目录(目录中的条目不会被复制)。此方法可与walkFileTree方法一起使用,以复制目录及目录中的所有条目,或者在需要时复制整个文件树

      options参数可能包括以下任何选项:

      选项
      选项 描述
      REPLACE_EXISTING 替换现有文件。非空目录无法替换。如果目标文件存在且是符号链接,则将替换符号链接本身,而不是链接的目标。
      COPY_ATTRIBUTES 尝试将与此文件关联的文件属性复制到目标文件。要复制的确切文件属性取决于平台和文件系统,因此未指定。最低限度,如果源文件和目标文件存储都支持,则将last-modified-time复制到目标文件。复制文件时间戳可能会导致精度丢失。
      NOFOLLOW_LINKS 不跟随符号链接。如果文件是符号链接,则将复制符号链接本身,而不是链接的目标。如果文件属性可以复制到新链接,则具体实现可能会忽略。换句话说,在复制符号链接时,可能会忽略COPY_ATTRIBUTES选项。

      复制文件不是原子操作。如果抛出IOException,则可能目标文件不完整或其某些文件属性未从源文件复制。当指定REPLACE_EXISTING选项并且目标文件存在时,目标文件将被替换。对文件的存在性检查和新文件的创建可能与其他文件系统活动不是原子的。

      使用示例:假设我们想将文件复制到目录中,并将其文件名与源文件相同:

          Path source = ...
          Path newdir = ...
          Files.copy(source, newdir.resolve(source.getFileName());
      
      参数:
      source - 要复制的文件的路径
      target - 目标文件的路径(可能与源路径关联不同的提供程序)
      options - 指定复制方式的选项
      返回:
      目标文件的路径
      抛出:
      UnsupportedOperationException - 如果数组包含不受支持的复制选项
      FileAlreadyExistsException - 如果目标文件存在但无法替换,因为未指定REPLACE_EXISTING选项 (可选特定异常)
      DirectoryNotEmptyException - 指定了REPLACE_EXISTING选项,但文件无法替换,因为它是非空目录 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对源文件的读取访问权限,调用checkWrite方法来检查对目标文件的写入访问权限。如果复制符号链接,则会调用安全管理器来检查 LinkPermission ("symbolic")
    • move

      public static Path move(Path source, Path target, CopyOption... options) throws IOException
      移动或重命名文件到目标文件。

      默认情况下,此方法尝试将文件移动到目标文件,如果目标文件存在,则失败,除非源文件和目标文件是相同文件,在这种情况下,此方法不起作用。如果文件是符号链接,则移动的是符号链接本身,而不是链接的目标。此方法可用于移动空目录。在某些实现中,目录在创建时会有特殊文件或链接的条目。在这种实现中,只有存在特殊条目时目录才被视为空。当调用移动非空目录时,只有在不需要移动目录中的条目时才会移动目录。例如,在同一FileStore上重命名目录通常不需要移动目录中的条目。当移动目录需要移动其条目时,此方法将失败(通过抛出 IOException)。移动文件树可能涉及复制而不是移动目录,可以使用copy方法与Files.walkFileTree实用方法结合使用。

      options参数可以包括以下任何选项:

      选项
      选项 描述
      REPLACE_EXISTING 替换现有文件。无法替换非空目录。如果目标文件存在且是符号链接,则替换的是符号链接本身,而不是链接的目标。
      ATOMIC_MOVE 将移动操作作为原子文件系统操作执行,所有其他选项将被忽略。如果目标文件存在,则实现特定的操作会替换现有文件或通过抛出IOException使此方法失败。如果无法将移动操作作为原子文件系统操作执行,则会抛出AtomicMoveNotSupportedException。例如,当目标位置位于不同的FileStore上并且需要复制文件,或者目标位置与此对象关联的提供程序不同时,就会出现这种情况。

      移动文件将复制文件的最后修改时间到目标文件(如果源文件和目标文件存储都支持)。复制文件时间戳可能会导致精度丢失。实现还可能尝试复制其他文件属性,但如果文件属性无法复制,则不要求失败。当将移动操作作为非原子操作执行并抛出IOException时,文件的状态未定义。原始文件和目标文件可能都存在,目标文件可能不完整,或者某些文件属性可能未从原始文件复制。

      使用示例:假设我们想将文件重命名为"newname",保留文件在同一目录中:

          Path source = ...
          Files.move(source, source.resolveSibling("newname"));
      
      或者,假设我们想将文件移动到新目录,保留相同的文件名,并替换目录中具有相同名称的任何现有文件:
          Path source = ...
          Path newdir = ...
          Files.move(source, newdir.resolve(source.getFileName()), REPLACE_EXISTING);
      
      参数:
      source - 要移动的文件的路径
      target - 目标文件的路径(可能与源路径关联的提供程序不同)
      options - 指定移动方式的选项
      返回:
      目标文件的路径
      抛出:
      UnsupportedOperationException - 如果数组包含不受支持的复制选项
      FileAlreadyExistsException - 如果目标文件存在但无法替换,因为未指定REPLACE_EXISTING选项 (可选特定异常)
      DirectoryNotEmptyException - 已指定REPLACE_EXISTING选项,但无法替换文件,因为它是非空目录,或源是包含必须移动的条目的非空目录 (可选特定异常)
      AtomicMoveNotSupportedException - 如果选项数组包含ATOMIC_MOVE选项,但文件无法作为原子文件系统操作移动。
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,将调用checkWrite方法来检查对源文件和目标文件的写访问权限。
    • readSymbolicLink

      public static Path readSymbolicLink(Path link) throws IOException
      读取符号链接的目标(可选操作) 符号链接,则使用此方法读取链接的目标,如果文件不是符号链接,则失败。链接的目标不一定存在。返回的 Path对象将与 link关联到相同的文件系统。

      参数:
      link - 符号链接的路径
      返回:
      表示链接目标的Path对象
      抛出:
      UnsupportedOperationException - 如果实现不支持符号链接
      NotLinkException - 如果无法读取目标,因为文件不是符号链接 (可选特定异常)
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,检查是否已授予FilePermission的"readlink"操作以读取链接。
    • getFileStore

      public static FileStore getFileStore(Path path) throws IOException
      返回表示文件所在文件存储的FileStore FileStore的引用,如果对返回的 FileStore执行操作,或从中获取的 FileStoreAttributeView对象,是否继续依赖文件的存在是实现特定的。特别是对于文件被删除或移动到不同文件存储的情况,行为未定义。

      参数:
      path - 文件的路径
      返回:
      文件所在的文件存储
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,将调用checkRead方法来检查对文件的读访问权限,并且还检查RuntimePermission("getFileStoreAttributes")
    • isSameFile

      public static boolean isSameFile(Path path, Path path2) throws IOException
      测试两个路径是否定位到相同的文件。 Path对象均 相等,则此方法将返回 true,而无需检查文件是否存在。如果两个 Path对象与不同的提供程序关联,则此方法将返回 false。否则,此方法将检查两个 Path对象是否定位到相同的文件,并根据实现的不同,可能需要打开或访问两个文件。

      Paths实现等价关系。

      • 它是自反的:对于Path fisSameFile(f,f)应返回true
      • 它是对称的:对于两个Paths fgisSameFile(f,g)将等于isSameFile(g,f)
      • 它是传递的:对于三个Paths fgh,如果isSameFile(f,g)返回trueisSameFile(g,h)返回true,则isSameFile(f,h)将返回true
      参数:
      path - 文件的一个路径
      path2 - 另一个路径
      返回:
      true 当且仅当两个路径定位到相同的文件时
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用 checkRead 方法来检查对两个文件的读取访问权限。
      参见:
    • mismatch

      public static long mismatch(Path path, Path path2) throws IOException
      查找并返回两个文件内容中第一个不匹配字节的位置,如果没有不匹配则返回-1L。位置将在包含范围内,从0L到较小文件的大小(以字节为单位)。

      如果满足以下条件之一,则认为两个文件匹配:

      • 两个路径定位到相同的文件,即使两个相等的路径定位到一个不存在的文件,或者
      • 两个文件大小相同,并且第一个文件中的每个字节与第二个文件中对应的字节相同。

      否则,两个文件之间存在不匹配,此方法返回的值为:

      • 第一个不匹配字节的位置,或
      • 当文件大小不同且较小文件的每个字节与较大文件的对应字节相同时,较小文件的大小(以字节为单位)。

      此方法可能不是原子的,关于其他文件系统操作。此方法始终是自反的(对于Path fmismatch(f,f)返回-1L)。如果文件系统和文件保持静态,则此方法是对称的(对于两个Paths fgmismatch(f,g)将返回与mismatch(g,f)相同的值)。

      参数:
      path - 第一个文件的路径
      path2 - 第二个文件的路径
      返回:
      第一个不匹配的位置,如果没有不匹配则返回-1L
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用 checkRead 方法来检查对两个文件的读取访问权限。
      自 JDK 版本:
      12
    • isHidden

      public static boolean isHidden(Path path) throws IOException
      判断文件是否被视为隐藏
      API 注释:
      隐藏的确切定义取决于平台或提供程序。例如,在 UNIX 上,如果文件名以句点字符('.')开头,则文件被视为隐藏。在 Windows 上,如果设置了 DOS hidden 属性,则文件被视为隐藏。

      根据实现的不同,此方法可能需要访问文件系统以确定文件是否被视为隐藏。

      参数:
      path - 要测试的文件的路径
      返回:
      true 如果文件被视为隐藏
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用 checkRead 方法来检查对文件的读取访问权限。
    • probeContentType

      public static String probeContentType(Path path) throws IOException
      探测文件的内容类型。

      此方法使用已安装的FileTypeDetector实现来探测给定文件以确定其内容类型。依次调用每个文件类型探测器的probeContentType,以探测文件类型。如果文件被识别,则返回内容类型。如果没有任何已安装的文件类型探测器识别文件,则调用系统默认文件类型探测器来猜测内容类型。

      Java 虚拟机的每次调用维护一个系统范围的文件类型探测器列表。已安装的文件类型探测器使用由 ServiceLoader 类定义的服务提供程序加载工具加载。已安装的文件类型探测器使用系统类加载器加载。如果找不到系统类加载器,则使用平台类加载器。文件类型探测器通常通过将它们放置在应用程序类路径上的 JAR 文件中来安装它们,该 JAR 文件包含一个名为 java.nio.file.spi.FileTypeDetector 的提供程序配置文件,位于资源目录 META-INF/services 中,并且文件列出了一个或多个具有零参数构造函数的 FileTypeDetector 的具体子类的完全限定名称。如果定位或实例化已安装的文件类型探测器的过程失败,则会抛出未指定的错误。已安装提供程序的定位顺序是特定于实现的。

      此方法的返回值是根据RFC 2045: Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies中定义的多用途互联网邮件扩展(MIME)内容类型的值的字符串形式。该字符串保证根据 RFC 中的语法可解析。

      参数:
      path - 要探测的文件的路径
      返回:
      文件的内容类型,如果无法确定内容类型则返回null
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 如果安装了安全管理器并且拒绝文件类型探测器实现所需的未指定权限。
      外部规范
    • getFileAttributeView

      public static <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options)
      返回给定类型的文件属性视图。

      文件属性视图提供一组文件属性的只读或可更新视图。此方法旨在用于文件属性视图定义类型安全方法以读取或更新文件属性的情况。 type 参数是所需属性视图的类型,如果支持,则该方法返回该类型的实例。 BasicFileAttributeView 类型支持访问文件的基本属性。调用此方法选择该类型的文件属性视图将始终返回该类的实例。

      可以使用 options 数组指示结果文件属性视图如何处理文件是符号链接的情况。默认情况下,将跟随符号链接。如果存在选项 NOFOLLOW_LINKS,则不会跟随符号链接。不支持符号链接的实现将忽略此选项。

      使用示例: 假设我们想要读取或设置文件的 ACL(如果支持):

          Path path = ...
          AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
          if (view != null) {
              List<AclEntry> acl = view.getAcl();
              :
          }
      
      类型参数:
      V - FileAttributeView 类型
      参数:
      path - 文件的路径
      type - 对应于文件属性视图的 Class 对象
      options - 指示如何处理符号链接的选项
      返回:
      指定类型的文件属性视图,如果属性视图类型不可用则返回null
    • readAttributes

      public static <A extends BasicFileAttributes> A readAttributes(Path path, Class<A> type, LinkOption... options) throws IOException
      读取文件属性作为批量操作。

      type参数是所需属性的类型,如果支持,此方法将返回该类型的实例。所有实现都支持一组基本的文件属性,因此使用 BasicFileAttributes.class作为type参数调用此方法不会抛出 UnsupportedOperationException异常。

      options数组可用于指示如何处理符号链接,如果文件是符号链接的情况。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      具体实现是否将所有文件属性作为原子操作读取,与其他文件系统操作有关。

      使用示例:假设我们想要批量读取文件的属性:

          Path path = ...
          BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
      
      或者,假设我们想要读取文件的 POSIX 属性而不跟随符号链接:
          PosixFileAttributes attrs =
              Files.readAttributes(path, PosixFileAttributes.class, NOFOLLOW_LINKS);
      
      类型参数:
      A - BasicFileAttributes类型
      参数:
      path - 文件的路径
      type - 要读取的文件属性的Class
      options - 指示如何处理符号链接的选项
      返回:
      文件属性
      抛出:
      UnsupportedOperationException - 如果不支持给定类型的属性
      IOException - 如果发生 I/O 错误
      SecurityException - 在默认提供程序的情况下,安装了安全管理器,将调用其checkRead方法来检查对文件的读取访问权限。如果调用此方法来读取安全敏感属性,则可能会调用安全管理器以检查其他权限。
    • setAttribute

      public static Path setAttribute(Path path, String attribute, Object value, LinkOption... options) throws IOException
      设置文件属性的值。

      attribute参数标识要设置的属性,格式如下:

      [view-name:]attribute-name
      其中方括号 [...] 表示可选组件,字符':'代表它本身。

      view-name是标识一组文件属性的FileAttributeViewname。如果未指定,则默认为"basic",这是标识许多文件系统通用基本文件属性集的文件属性视图的名称。 attribute-name是集合内的属性名称。

      options数组可用于指示如何处理符号链接,如果文件是符号链接的情况。默认情况下,会跟随符号链接并设置链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      使用示例:假设我们想要设置 DOS 的“hidden”属性:

          Path path = ...
          Files.setAttribute(path, "dos:hidden", true);
      
      参数:
      path - 文件的路径
      attribute - 要设置的属性
      value - 属性值
      options - 指示如何处理符号链接的选项
      返回:
      给定路径
      抛出:
      UnsupportedOperationException - 如果属性视图不可用
      IllegalArgumentException - 如果未指定属性名称,或者属性名称无法识别,或者属性值类型正确但值不合适
      ClassCastException - 如果属性值不是预期类型,或者是包含不是预期类型元素的集合
      IOException - 如果发生 I/O 错误
      SecurityException - 在默认提供程序的情况下,安装了安全管理器,其checkWrite方法拒绝对文件的写访问。如果调用此方法来设置安全敏感属性,则可能会调用安全管理器以检查其他权限。
    • getAttribute

      public static Object getAttribute(Path path, String attribute, LinkOption... options) throws IOException
      读取文件属性的值。

      attribute参数标识要读取的属性,格式如下:

      [view-name:]attribute-name
      其中方括号 [...] 表示可选组件,字符':'代表它本身。

      view-name是标识一组文件属性的FileAttributeViewname。如果未指定,则默认为"basic",这是标识许多文件系统通用基本文件属性集的文件属性视图的名称。 attribute-name是属性的名称。

      options数组可用于指示如何处理符号链接,如果文件是符号链接的情况。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      使用示例:假设我们需要在支持“unix”视图的系统上获取文件所有者的用户 ID:

          Path path = ...
          int uid = (Integer)Files.getAttribute(path, "unix:uid");
      
      参数:
      path - 文件的路径
      attribute - 要读取的属性
      options - 指示如何处理符号链接的选项
      返回:
      属性值
      抛出:
      UnsupportedOperationException - 如果属性视图不可用
      IllegalArgumentException - 如果未指定属性名称或属性名称无法识别
      IOException - 如果发生 I/O 错误
      SecurityException - 在默认提供程序的情况下,安装了安全管理器,其checkRead方法拒绝对文件的读取访问。如果调用此方法来读取安全敏感属性,则可能会调用安全管理器以检查其他权限。
    • readAttributes

      public static Map<String,Object> readAttributes(Path path, String attributes, LinkOption... options) throws IOException
      以批量操作的形式读取一组文件属性。

      attributes参数标识要读取的属性,并采用以下形式:

      [view-name:]attribute-list
      其中方括号 [...] 表示可选组件,字符':'代表它本身。

      view-namenameFileAttributeView,用于标识一组文件属性。如果未指定,则默认为"basic",这是标识许多文件系统中常见的基本文件属性集的文件属性视图的名称。

      attribute-list组件是一个逗号分隔的属性名称列表,用于读取一个或多个属性的名称。如果列表包含值"*",则读取所有属性。不支持的属性将被忽略,并且不会出现在返回的映射中。关于是否将所有属性作为原子操作读取,这取决于实现特定的文件系统操作。

      以下示例演示了attributes参数的可能值:

      可能的值
      示例 描述
      "*" 读取所有basic-file-attributes
      "size,lastModifiedTime,lastAccessTime" 读取文件大小、最后修改时间和最后访问时间属性。
      "posix:*" 读取所有POSIX-file-attributes
      "posix:permissions,owner,size" 读取POSIX文件权限、所有者和文件大小。

      options数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,将跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      参数:
      path - 文件路径
      attributes - 要读取的属性
      options - 指示如何处理符号链接的选项
      返回:
      返回的属性映射;映射的键是属性名称,其值是属性值
      抛出:
      UnsupportedOperationException - 如果属性视图不可用
      IllegalArgumentException - 如果未指定属性或指定了无法识别的属性
      IOException - 如果发生I/O错误
      SecurityException - 对于默认提供程序,如果安装了安全管理器,则其checkRead方法拒绝对文件的读取访问。如果调用此方法来读取安全敏感属性,则可能会调用安全管理器以检查其他权限。
    • getPosixFilePermissions

      public static Set<PosixFilePermission> getPosixFilePermissions(Path path, LinkOption... options) throws IOException
      返回文件的POSIX文件权限。

      path参数与支持PosixFileAttributeViewFileSystem相关联。此属性视图提供对与实现便携操作系统接口(POSIX)系列标准的操作系统使用的文件相关的文件属性的访问。

      options数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,将跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      参数:
      path - 文件路径
      options - 指示如何处理符号链接的选项
      返回:
      文件权限
      抛出:
      UnsupportedOperationException - 如果关联的文件系统不支持PosixFileAttributeView
      IOException - 如果发生I/O错误
      SecurityException - 对于默认提供程序,如果安装了安全管理器,并且它拒绝RuntimePermission("accessUserInformation")或其checkRead方法拒绝对文件的读取访问。
    • setPosixFilePermissions

      public static Path setPosixFilePermissions(Path path, Set<PosixFilePermission> perms) throws IOException
      设置文件的POSIX权限。

      path参数与支持PosixFileAttributeViewFileSystem相关联。此属性视图提供对与实现便携操作系统接口(POSIX)系列标准的操作系统使用的文件相关的文件属性的访问。

      参数:
      path - 文件路径
      perms - 新的权限集
      返回:
      给定的路径
      抛出:
      UnsupportedOperationException - 如果关联的文件系统不支持PosixFileAttributeView
      ClassCastException - 如果集合包含不是PosixFilePermission类型的元素
      IOException - 如果发生I/O错误
      SecurityException - 对于默认提供程序,如果安装了安全管理器,并且它拒绝RuntimePermission("accessUserInformation")或其checkWrite方法拒绝对文件的写访问。
    • getOwner

      public static UserPrincipal getOwner(Path path, LinkOption... options) throws IOException
      返回文件的所有者。

      path参数与支持FileOwnerAttributeView的文件系统相关联。此文件属性视图提供对文件所有者的文件属性的访问。

      参数:
      path - 文件路径
      options - 指示如何处理符号链接的选项
      返回:
      表示文件所有者的用户主体
      抛出:
      UnsupportedOperationException - 如果关联的文件系统不支持FileOwnerAttributeView
      IOException - 如果发生I/O错误
      SecurityException - 对于默认提供程序,如果安装了安全管理器,并且它拒绝RuntimePermission("accessUserInformation")或其checkRead方法拒绝对文件的读访问。
    • setOwner

      public static Path setOwner(Path path, UserPrincipal owner) throws IOException
      更新文件所有者。

      path参数与支持FileOwnerAttributeView的文件系统相关联。此文件属性视图提供对文件所有者的文件属性的访问。

      使用示例:假设我们要将"joe"设为文件的所有者:

          Path path = ...
          UserPrincipalLookupService lookupService =
              provider(path).getUserPrincipalLookupService();
          UserPrincipal joe = lookupService.lookupPrincipalByName("joe");
          Files.setOwner(path, joe);
      
      参数:
      path - 文件路径
      owner - 新文件所有者
      返回:
      给定的路径
      抛出:
      UnsupportedOperationException - 如果关联的文件系统不支持FileOwnerAttributeView
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,它拒绝RuntimePermission("accessUserInformation")或其checkWrite方法拒绝对文件的写访问。
      参见:
    • isSymbolicLink

      public static boolean isSymbolicLink(Path path)
      测试文件是否为符号链接。

      如果需要区分I/O异常和文件不是符号链接的情况,则可以使用readAttributes方法读取文件属性,并使用BasicFileAttributes.isSymbolicLink()方法测试文件类型。

      参数:
      path - 文件路径
      返回:
      如果文件是符号链接,则true; 如果文件不存在、不是符号链接或无法确定文件是否为符号链接,则false
      抛出:
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead方法拒绝对文件的读访问。
    • isDirectory

      public static boolean isDirectory(Path path, LinkOption... options)
      测试文件是否为目录。

      options数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      如果需要区分I/O异常和文件不是目录的情况,则可以使用readAttributes方法读取文件属性,并使用BasicFileAttributes.isDirectory()方法测试文件类型。

      参数:
      path - 要测试的文件路径
      options - 指示如何处理符号链接的选项
      返回:
      如果文件是目录,则true; 如果文件不存在、不是目录或无法确定文件是否为目录,则false
      抛出:
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead方法拒绝对文件的读访问。
    • isRegularFile

      public static boolean isRegularFile(Path path, LinkOption... options)
      测试文件是否为具有不透明内容的常规文件。

      options数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      如果需要区分I/O异常和文件不是常规文件的情况,则可以使用readAttributes方法读取文件属性,并使用BasicFileAttributes.isRegularFile()方法测试文件类型。

      参数:
      path - 文件路径
      options - 指示如何处理符号链接的选项
      返回:
      如果文件是常规文件,则true; 如果文件不存在、不是常规文件或无法确定文件是否为常规文件,则false
      抛出:
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead方法拒绝对文件的读访问。
    • getLastModifiedTime

      public static FileTime getLastModifiedTime(Path path, LinkOption... options) throws IOException
      返回文件的最后修改时间。

      options数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      参数:
      path - 文件路径
      options - 指示如何处理符号链接的选项
      返回:
      表示文件上次修改时间的FileTime,或者当文件系统不支持时间戳指示最后修改时间时的实现特定默认值
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead方法拒绝对文件的读访问。
      参见:
    • setLastModifiedTime

      public static Path setLastModifiedTime(Path path, FileTime time) throws IOException
      更新文件的最后修改时间属性。文件时间将转换为文件系统支持的时代和精度。从更精细到更粗粒度的转换会导致精度丢失。当尝试设置最后修改时间时,如果文件系统不支持或超出底层文件存储支持的范围,则此方法的行为未定义。可能会通过抛出IOException失败,也可能不会失败。

      使用示例: 假设我们想将最后修改时间设置为当前时间:

          Path path = ...
          FileTime now = FileTime.fromMillis(System.currentTimeMillis());
          Files.setLastModifiedTime(path, now);
      
      参数:
      path - 文件路径
      time - 新的最后修改时间
      返回:
      给定的路径
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,其checkWrite方法拒绝对文件的写访问。
      参见:
    • size

      public static long size(Path path) throws IOException
      返回文件的大小(以字节为单位)。由于压缩、支持稀疏文件或其他原因,大小可能与文件系统上的实际大小不同。不是regular文件的文件大小是实现特定的,因此未指定。
      参数:
      path - 文件路径
      返回:
      文件大小,以字节为单位
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead方法拒绝对文件的读访问。
      参见:
    • exists

      public static boolean exists(Path path, LinkOption... options)
      测试文件是否存在。

      参数options可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接。如果存在选项NOFOLLOW_LINKS,则不会跟随符号链接。

      请注意,此方法的结果立即过时。如果此方法指示文件存在,则不能保证后续访问将成功。在安全敏感应用程序中使用此方法时应格外小心。

      参数:
      path - 要测试的文件路径
      options - 指示如何处理符号链接的选项
      返回:
      如果文件存在则返回true; 如果文件不存在或无法确定其存在则返回false
      抛出:
      SecurityException - 在默认提供程序的情况下,将调用SecurityManager.checkRead(String)来检查对文件的读取访问权限。
      参见:
    • notExists

      public static boolean notExists(Path path, LinkOption... options)
      测试文件是否不存在。此方法适用于需要在确认文件不存在时采取操作的情况。

      参数options可用于指示如何处理文件为符号链接的情况。默认情况下,会跟随符号链接。如果选项NOFOLLOW_LINKS存在,则不会跟随符号链接。

      请注意,此方法不是exists方法的补充。如果无法确定文件是否存在,则这两种方法都返回false。与exists方法一样,此方法的结果立即过时。如果此方法指示文件存在,则不能保证随后尝试创建文件将成功。在安全敏感应用程序中使用此方法时应格外小心。

      参数:
      path - 要测试的文件路径
      options - 指示如何处理符号链接的选项
      返回:
      如果文件不存在则返回true; 如果文件存在或无法确定其存在则返回false
      抛出:
      SecurityException - 在默认提供程序的情况下,将调用SecurityManager.checkRead(String)来检查对文件的读取访问权限。
    • isReadable

      public static boolean isReadable(Path path)
      测试文件是否可读。此方法检查文件是否存在,并且此Java虚拟机具有允许打开文件进行读取的适当权限。根据实现方式,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以便检查对文件的有效访问权限。因此,此方法可能不是原子的,与其他文件系统操作无关。

      请注意,此方法的结果立即过时,不能保证随后尝试打开文件进行读取将成功(甚至访问相同文件)。在安全敏感应用程序中使用此方法时应格外小心。

      参数:
      path - 要检查的文件路径
      返回:
      如果文件存在且可读则返回true; 如果文件不存在、由于Java虚拟机权限不足而拒绝读取访问,或无法确定访问权限则返回false
      抛出:
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则将调用checkRead来检查对文件的读取访问权限。
    • isWritable

      public static boolean isWritable(Path path)
      测试文件是否可写。此方法检查文件是否存在,并且此Java虚拟机具有允许打开文件进行写入的适当权限。根据实现方式,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以便检查对文件的有效访问权限。因此,此方法可能不是原子的,与其他文件系统操作无关。

      请注意,此方法的结果立即过时,不能保证随后尝试打开文件进行写入将成功(甚至访问相同文件)。在安全敏感应用程序中使用此方法时应格外小心。

      参数:
      path - 要检查的文件路径
      返回:
      如果文件存在且可写则返回true; 如果文件不存在、由于Java虚拟机权限不足而拒绝写入访问,或无法确定访问权限则返回false
      抛出:
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则将调用checkWrite来检查对文件的写入访问权限。
    • isExecutable

      public static boolean isExecutable(Path path)
      测试文件是否可执行。此方法检查文件是否存在,并且此Java虚拟机具有适当权限来执行该文件。在检查对目录的访问权限时,语义可能有所不同。例如,在UNIX系统上,检查执行权限会检查Java虚拟机是否有权限搜索目录以访问文件或子目录。

      根据实现方式,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以便检查对文件的有效访问权限。因此,此方法可能不是原子的,与其他文件系统操作无关。

      请注意,此方法的结果立即过时,不能保证随后尝试执行文件将成功(甚至访问相同文件)。在安全敏感应用程序中使用此方法时应格外小心。

      参数:
      path - 要检查的文件路径
      返回:
      如果文件存在且可执行则返回true; 如果文件不存在、由于Java虚拟机权限不足而拒绝执行访问,或无法确定访问权限则返回false
      抛出:
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则将调用checkExec来检查对文件的执行访问权限。
    • walkFileTree

      public static Path walkFileTree(Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor) throws IOException
      遍历文件树。

      此方法遍历以给定起始文件为根的文件树。文件树遍历是深度优先的,对每个遇到的文件调用给定的FileVisitor。当树中的所有可访问文件都被访问完毕,或者一个访问方法返回TERMINATE时,文件树遍历完成。如果一个访问方法由于IOException、未捕获的错误或运行时异常而终止,则遍历也将终止,并将错误或异常传播给此方法的调用者。

      对于每个遇到的文件,此方法尝试读取其BasicFileAttributes。如果文件不是目录,则调用visitFile方法并传入文件属性。如果由于I/O异常无法读取文件属性,则调用visitFileFailed方法并传入I/O异常。

      如果文件是一个目录,但无法打开该目录,则在此之后调用visitFileFailed方法并传入I/O异常,然后文件树遍历默认继续到该目录的下一个同级目录。

      如果目录成功打开,则访问目录中的条目及其后代。当所有条目都被访问完毕,或者在迭代目录时发生I/O错误,则关闭目录并调用访问者的postVisitDirectory方法。然后文件树遍历默认继续到该目录的下一个同级目录。

      默认情况下,此方法不会自动跟随符号链接。如果options参数包含FOLLOW_LINKS选项,则会跟随符号链接。在跟随链接时,如果无法读取目标的属性,则此方法尝试获取链接的BasicFileAttributes。如果可以读取,则调用visitFile方法并传入链接的属性(否则调用visitFileFailed方法,如上所述)。

      如果options参数包含FOLLOW_LINKS选项,则此方法会跟踪已访问的目录,以便检测循环。当目录中存在一个是该目录祖先的条目时,就会产生循环。循环检测通过记录目录的file-key或(如果文件键不可用)通过调用isSameFile方法来测试目录是否与祖先是同一文件来完成。当检测到循环时,将其视为I/O错误,并调用visitFileFailed方法并传入一个FileSystemLoopException实例。

      maxDepth参数是要访问的目录级别的最大数量。值为0表示只访问起始文件,除非被安全管理器拒绝。值为MAX_VALUE可用于指示应访问所有级别。对于在maxDepth处遇到的所有文件(包括目录),都会调用visitFile方法,除非无法读取基本文件属性,在这种情况下将调用visitFileFailed方法。

      如果访问者返回null结果,则会抛出NullPointerException

      当安装了安全管理器并且拒绝访问文件(或目录)时,将被忽略,并且不会为该文件(或目录)调用访问者。

      参数:
      start - 起始文件
      options - 配置遍历的选项
      maxDepth - 要访问的最大目录级别
      visitor - 每个文件要调用的文件访问者
      返回:
      起始文件
      抛出:
      IllegalArgumentException - 如果maxDepth参数为负数
      SecurityException - 如果安全管理器拒绝访问起始文件。在默认提供程序的情况下,将调用checkRead方法来检查对目录的读取访问权限。
      IOException - 如果访问者方法抛出I/O错误
    • walkFileTree

      public static Path walkFileTree(Path start, FileVisitor<? super Path> visitor) throws IOException
      遍历文件树。

      此方法的作用相当于评估以下表达式:

      Files.walkFileTree(start, EnumSet.noneOf(FileVisitOption.class), Integer.MAX_VALUE, visitor)
      换句话说,它不会跟随符号链接,并访问文件树的所有级别。
      参数:
      start - 起始文件
      visitor - 每个文件要调用的文件访问者
      返回:
      起始文件
      抛出:
      SecurityException - 如果安全管理器拒绝访问起始文件。在默认提供程序的情况下,将调用checkRead方法来检查对目录的读取访问权限。
      IOException - 如果访问者方法抛出I/O错误
    • newBufferedReader

      public static BufferedReader newBufferedReader(Path path, Charset cs) throws IOException
      为读取而打开文件,返回一个BufferedReader,可用于以高效的方式从文件中读取文本。文件中的字节使用指定的字符集解码为字符。读取从文件的开头开始。

      从文件读取的Reader方法在读取到格式错误或无法映射的字节序列时会抛出IOException

      参数:
      path - 文件的路径
      cs - 用于解码的字符集
      返回:
      一个新的缓冲读取器,具有默认缓冲区大小,用于从文件中读取文本
      抛出:
      IOException - 如果打开文件时发生I/O错误
      SecurityException - 在默认提供程序的情况下,如果安装了安全管理器,则将调用checkRead方法来检查对文件的读取访问权限。
      参见:
    • newBufferedReader

      public static BufferedReader newBufferedReader(Path path) throws IOException
      为读取而打开文件,返回一个BufferedReader,以高效的方式从文件中读取文本。文件中的字节使用UTF-8 charset解码为字符。

      此方法的作用相当于评估以下表达式:

      Files.newBufferedReader(path, StandardCharsets.UTF_8)
      参数:
      path - 文件的路径
      返回:
      一个新的缓冲读取器,具有默认缓冲区大小,用于从文件中读取文本
      抛出:
      IOException - 如果打开文件时发生I/O错误
      SecurityException - 在默认提供程序的情况下,如果安装了安全管理器,则将调用checkRead方法来检查对文件的读取访问权限。
      自1.8起
    • newBufferedWriter

      public static BufferedWriter newBufferedWriter(Path path, Charset cs, OpenOption... options) throws IOException
      打开文件以进行写入或创建文件,返回一个BufferedWriter,可用于以高效的方式向文件写入文本。options参数指定如何创建或打开文件。如果没有选项,则此方法的工作方式就好像存在CREATETRUNCATE_EXISTINGWRITE选项一样。换句话说,它会打开文件进行写入,如果文件不存在,则创建文件,或者如果存在一个初始大小为0的现有regular-file,则将其截断。

      写入文本的Writer方法在使用指定字符集编码文本时抛出IOException。由于缓冲,由于编码错误(无法映射字符或格式错误输入)引起的IOException可能在写入刷新关闭缓冲写入器时抛出。

      参数:
      path - 文件路径
      cs - 用于编码的字符集
      options - 指定文件打开方式的选项
      返回:
      一个新的缓冲写入器,具有默认缓冲区大小,用于向文件写入文本
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 如果打开或创建文件时发生I/O错误
      UnsupportedOperationException - 如果指定了不支持的选项
      FileAlreadyExistsException - 如果同名文件已经存在且指定了CREATE_NEW选项 (可选的具体异常)
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
      参见:
    • newBufferedWriter

      public static BufferedWriter newBufferedWriter(Path path, OpenOption... options) throws IOException
      打开或创建文件以进行写入,返回一个BufferedWriter以便以高效的方式向文件写入文本。文本将使用UTF-8 字符集进行编码为字节进行写入。

      此方法的工作方式就好像调用它等同于评估表达式:

      Files.newBufferedWriter(path, StandardCharsets.UTF_8, options)
      参数:
      path - 文件路径
      options - 指定文件打开方式的选项
      返回:
      一个新的缓冲写入器,具有默认缓冲区大小,用于向文件写入文本
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 如果打开或创建文件时发生I/O错误
      UnsupportedOperationException - 如果指定了不支持的选项
      FileAlreadyExistsException - 如果同名文件已经存在且指定了CREATE_NEW选项 (可选的具体异常)
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
      自 JDK 版本:
      1.8
    • copy

      public static long copy(InputStream in, Path target, CopyOption... options) throws IOException
      将输入流中的所有字节复制到文件中。返回时,输入流将位于流的末尾。

      默认情况下,如果目标文件已经存在或是符号链接,则复制操作将失败。如果指定了REPLACE_EXISTING选项,并且目标文件已经存在,则如果它不是非空目录,则会被替换。如果目标文件存在且是符号链接,则符号链接将被替换。在此版本中,REPLACE_EXISTING选项是此方法必须支持的唯一选项。将来的版本可能支持其他选项。

      如果在从输入流读取或向文件写入时发生I/O错误,则可能在创建目标文件并读取或写入一些字节后发生错误。因此,输入流可能不在流的末尾,并且可能处于不一致的状态。强烈建议在发生I/O错误时立即关闭输入流。

      此方法可能会无限期地阻塞读取输入流(或写入文件)。对于输入流在复制过程中异步关闭或线程在复制过程中被中断的情况,其行为高度依赖于输入流和文件系统提供程序的具体实现,因此未指定。

      使用示例:假设我们想要捕获一个网页并将其保存到文件中:

          Path path = ...
          URI u = URI.create("http://www.example.com/");
          try (InputStream in = u.toURL().openStream()) {
              Files.copy(in, path);
          }
      
      参数:
      in - 要从中读取的输入流
      target - 文件路径
      options - 指定复制方式的选项
      返回:
      读取或写入的字节数
      抛出:
      IOException - 如果在读取或写入时发生I/O错误
      FileAlreadyExistsException - 如果目标文件已经存在但无法替换,因为未指定REPLACE_EXISTING选项 (可选的具体异常)
      DirectoryNotEmptyException - 如果指定了REPLACE_EXISTING选项但无法替换文件,因为它是非空目录 (可选的具体异常)
      UnsupportedOperationException - 如果options包含不支持的复制选项
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果指定了REPLACE_EXISTING选项,则会调用安全管理器的checkDelete方法来检查是否可以删除现有文件。
    • copy

      public static long copy(Path source, OutputStream out) throws IOException
      将文件中的所有字节复制到输出流中。

      如果在从文件读取或向输出流写入时发生I/O错误,则可能在读取或写入一些字节后发生错误。因此,输出流可能处于不一致的状态。强烈建议在发生I/O错误时立即关闭输出流。

      此方法可能会无限期地阻塞写入输出流(或从文件读取)。对于输出流在复制过程中异步关闭或线程在复制过程中被中断的情况,其行为高度依赖于输出流和文件系统提供程序的具体实现,因此未指定。

      请注意,如果给定的输出流是Flushable,则可能需要在此方法完成后调用其flush方法以刷新任何缓冲输出。

      参数:
      source - 文件路径
      out - 要写入的输出流
      返回:
      读取或写入的字节数
      抛出:
      IOException - 如果在读取或写入时发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对文件的读访问权限。
    • readAllBytes

      public static byte[] readAllBytes(Path path) throws IOException
      从文件中读取所有字节。该方法确保在读取所有字节或抛出I/O错误或其他运行时异常时关闭文件。

      请注意,此方法适用于简单情况,其中将所有字节读入字节数组是方便的。不适用于读取大型文件。

      参数:
      path - 文件路径
      返回:
      包含从文件中读取的字节的字节数组
      抛出:
      IOException - 如果从流中读取时发生I/O错误
      OutOfMemoryError - 如果无法分配所需大小的数组,例如文件大于2GB
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对文件的读访问权限。
    • readString

      public static String readString(Path path) throws IOException
      从文件中读取所有内容到一个字符串中,使用UTF-8 字符集将字节解码为字符。该方法确保在所有内容被读取或发生I/O错误或其他运行时异常时关闭文件。

      此方法等效于:readString(path, StandardCharsets.UTF_8)

      参数:
      path - 文件路径
      返回:
      包含从文件中读取的内容的字符串
      抛出:
      IOException - 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列
      OutOfMemoryError - 如果文件非常大,例如大于2GB
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead方法来检查对文件的读取访问权限。
      自:
      11
    • readString

      public static String readString(Path path, Charset cs) throws IOException
      从文件中读取所有字符到一个字符串中,使用指定的字符集将字节解码为字符。该方法确保在所有内容被读取或发生I/O错误或其他运行时异常时关闭文件。

      此方法读取所有内容,包括中间和/或末尾的换行符。生成的字符串将包含文件中出现的换行符。

      API注释:
      此方法适用于简单情况,适合将文件内容读取到字符串中。不适用于读取非常大的文件。
      参数:
      path - 文件路径
      cs - 用于解码的字符集
      返回:
      包含从文件中读取的内容的字符串
      抛出:
      IOException - 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列
      OutOfMemoryError - 如果文件非常大,例如大于2GB
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead方法来检查对文件的读取访问权限。
      自:
      11
    • readAllLines

      public static List<String> readAllLines(Path path, Charset cs) throws IOException
      从文件中读取所有行。该方法确保在所有字节被读取或发生I/O错误或其他运行时异常时关闭文件。从文件中的字节使用指定的字符集解码为字符。

      此方法将以下内容识别为行终止符:

      • \u000D后跟\u000A,回车后跟换行
      • \u000A,换行
      • \u000D,回车

      将来的版本可能会识别其他Unicode行终止符。

      请注意,此方法适用于简单情况,方便一次性读取所有行。不适用于读取大文件。

      参数:
      path - 文件路径
      cs - 用于解码的字符集
      返回:
      文件中的行作为List返回;List是否可修改取决于实现,因此未指定
      抛出:
      IOException - 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead方法来检查对文件的读取访问权限。
      参见:
    • readAllLines

      public static List<String> readAllLines(Path path) throws IOException
      从文件中读取所有行。从文件中的字节使用UTF-8 字符集解码为字符。

      此方法的工作方式就好像调用它等效于评估表达式:

      Files.readAllLines(path, StandardCharsets.UTF_8)
      参数:
      path - 文件路径
      返回:
      文件中的行作为List返回;List是否可修改取决于实现,因此未指定
      抛出:
      IOException - 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead方法来检查对文件的读取访问权限。
      自:
      1.8
    • write

      public static Path write(Path path, byte[] bytes, OpenOption... options) throws IOException
      向文件中写入字节。options参数指定如何创建或打开文件。如果没有选项,则此方法的工作方式就好像存在CREATETRUNCATE_EXISTINGWRITE选项。换句话说,它打开文件进行写入,如果文件不存在,则创建文件,或者将现有的常规文件最初截断为0大小。将字节数组中的所有字节写入文件。该方法确保在所有字节被写入文件后关闭文件(或发生I/O错误或其他运行时异常)。如果发生I/O错误,则可能在文件创建或截断后,或在一些字节被写入文件后发生。

      使用示例:默认情况下,该方法创建一个新文件或覆盖现有文件。假设您希望将字节追加到现有文件中:

          Path path = ...
          byte[] bytes = ...
          Files.write(path, bytes, StandardOpenOption.APPEND);
      
      参数:
      path - 文件路径
      bytes - 要写入的字节数组
      options - 指定如何打开文件
      返回:
      文件路径
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 如果写入或创建文件时发生I/O错误
      UnsupportedOperationException - 如果指定了不支持的选项
      FileAlreadyExistsException - 如果同名文件已存在且指定了CREATE_NEW选项 (可选的具体异常)
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则调用checkWrite方法来检查对文件的写入访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则调用checkDelete方法来检查删除访问权限。
    • write

      public static Path write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options) throws IOException
      将文本行写入文件。每行是一个字符序列,并按照平台的换行符(由系统属性line.separator定义)的顺序依次写入文件。使用指定的字符集将字符编码为字节。

      options参数指定如何创建或打开文件。如果没有选项,则此方法的工作方式就好像存在CREATETRUNCATE_EXISTINGWRITE选项。换句话说,它打开文件进行写入,如果文件不存在,则创建文件,或者将现有的常规文件最初截断为0大小。该方法确保在所有行被写入文件后关闭文件(或发生I/O错误或其他运行时异常)。如果发生I/O错误,则可能在文件创建或截断后,或在一些字节被写入文件后发生。

      参数:
      path - 文件路径
      lines - 用于迭代字符序列的对象
      cs - 用于编码的字符集
      options - 指定文件打开方式的选项
      返回:
      文件路径
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 写入或创建文件时发生I/O错误,或者无法使用指定的字符集对文本进行编码
      UnsupportedOperationException - 如果指定了不支持的选项
      FileAlreadyExistsException - 如果同名文件已存在且指定了CREATE_NEW选项 (可选的特定异常)
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
    • write

      public static Path write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) throws IOException
      将文本行写入文件。字符将使用UTF-8 字符集编码为字节。

      此方法的工作方式等同于评估以下表达式:

      Files.write(path, lines, StandardCharsets.UTF_8, options)
      参数:
      path - 文件路径
      lines - 用于迭代字符序列的对象
      options - 指定文件打开方式的选项
      返回:
      文件路径
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 写入或创建文件时发生I/O错误,或者文本无法使用UTF-8进行编码
      UnsupportedOperationException - 如果指定了不支持的选项
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
      自 JDK 版本:
      1.8
    • writeString

      public static Path writeString(Path path, CharSequence csq, OpenOption... options) throws IOException
      CharSequence写入文件。字符将使用UTF-8 字符集编码为字节。

      此方法等效于:writeString(path, csq, StandardCharsets.UTF_8, options)

      参数:
      path - 文件路径
      csq - 要写入的CharSequence
      options - 指定文件打开方式的选项
      返回:
      文件路径
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 写入或创建文件时发生I/O错误,或者文本无法使用UTF-8进行编码
      UnsupportedOperationException - 如果指定了不支持的选项
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
      自 JDK 版本:
      11
    • writeString

      public static Path writeString(Path path, CharSequence csq, Charset cs, OpenOption... options) throws IOException
      CharSequence写入文件。字符将使用指定的字符集编码为字节。

      所有字符都按原样写入,包括字符序列中的换行符。不会添加额外字符。

      options参数指定文件的创建或打开方式。如果没有提供选项,则此方法的工作方式等同于存在CREATETRUNCATE_EXISTINGWRITE选项。换句话说,它打开文件进行写入,如果文件不存在,则创建文件,或者将现有的regular-file最初截断为0大小。

      参数:
      path - 文件路径
      csq - 要写入的CharSequence
      cs - 用于编码的字符集
      options - 指定文件打开方式的选项
      返回:
      文件路径
      抛出:
      IllegalArgumentException - 如果options包含无效的选项组合
      IOException - 写入或创建文件时发生I/O错误,或者无法使用指定的字符集对文本进行编码
      UnsupportedOperationException - 如果指定了不支持的选项
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE选项打开文件,则会调用checkDelete方法来检查删除访问权限。
      自 JDK 版本:
      11
    • list

      public static Stream<Path> list(Path dir) throws IOException
      返回一个延迟填充的Stream,其中的元素是目录中的条目。列表不是递归的。

      流的元素是通过将目录条目的名称与dir解析得到的Path对象。一些文件系统维护到目录本身和父目录的特殊链接。不包括代表这些链接的条目。

      流是弱一致性的。它是线程安全的,但在迭代时不会冻结目录,因此可能(或可能不会)反映从此方法返回后发生的目录更新。

      返回的流包含对打开目录的引用。通过关闭流来关闭目录。

      对已关闭的流进行操作会表现为已达到流的末尾。由于预读,流关闭后可能会返回一个或多个元素。

      如果在此方法返回后访问目录时抛出IOException,则会将其包装在UncheckedIOException中,该异常将从导致访问发生的方法中抛出。

      API 注释:
      必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流的操作完成后及时关闭流的打开目录。
      参数:
      dir - 目录路径
      返回:
      描述目录内容的Stream
      抛出:
      NotDirectoryException - 如果无法打开文件,因为它不是目录 (可选的特定异常)
      IOException - 打开目录时发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对目录的读访问权限。
      自 JDK 版本:
      1.8
      参见:
    • walk

      public static Stream<Path> walk(Path start, int maxDepth, FileVisitOption... options) throws IOException
      返回一个Stream,该流通过遍历以给定起始文件为根的文件树来延迟填充Path。文件树以深度优先方式遍历,流中的元素是通过将相对路径与start进行解析获得的Path对象。

      在消耗元素时,stream遍历文件树。返回的Stream保证至少有一个元素,即起始文件本身。对于每个访问的文件,流尝试读取其BasicFileAttributes。如果文件是一个目录并且可以成功打开,目录中的条目及其后代将在遇到时在流中跟随该目录。当所有条目都被访问后,然后关闭目录。然后文件树遍历继续在目录的下一个同级处。

      该流是弱一致性的。在迭代时不会冻结文件树,因此它可能(或可能不)反映在从此方法返回后发生的文件树更新。

      默认情况下,此方法不会自动跟随符号链接。如果options参数包含FOLLOW_LINKS选项,则会跟随符号链接。在跟随链接时,如果无法读取目标的属性,则此方法尝试获取链接的BasicFileAttributes

      如果options参数包含FOLLOW_LINKS选项,则流会跟踪访问的目录,以便检测循环。当目录中存在一个条目是该目录的祖先时,就会出现循环。循环检测是通过记录目录的文件键,或者如果文件键不可用,则通过调用isSameFile方法来测试目录是否与祖先是同一文件。当检测到循环时,它被视为I/O错误,并使用FileSystemLoopException的实例处理。

      maxDepth参数是要访问的目录级别的最大数量。值为0表示只访问起始文件,除非被安全管理器拒绝。可以使用值MAX_VALUE来指示应访问所有级别。

      当安装了安全管理器并且拒绝访问文件(或目录)时,它将被忽略并且不包含在流中。

      返回的流包含对一个或多个打开目录的引用。通过关闭流来关闭这些目录。

      如果在此方法返回后访问目录时抛出IOException,则会将其包装在UncheckedIOException中,该异常将从导致访问发生的方法中抛出。

      API 注意:
      必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开目录。
      参数:
      start - 起始文件
      maxDepth - 要访问的目录级别的最大数量
      options - 配置遍历的选项
      返回:
      StreamPath
      抛出:
      IllegalArgumentException - 如果maxDepth参数为负
      SecurityException - 如果安全管理器拒绝访问起始文件。对于默认提供程序,将调用checkRead方法来检查对目录的读取访问权限。
      IOException - 如果在访问起始文件时抛出I/O错误。
      自:
      1.8
    • walk

      public static Stream<Path> walk(Path start, FileVisitOption... options) throws IOException
      返回一个Stream,该流通过遍历以给定起始文件为根的文件树来延迟填充Path。文件树以深度优先方式遍历,流中的元素是通过将相对路径与start进行解析获得的Path对象。

      此方法的工作方式等同于评估以下表达式:

      Files.walk(start, Integer.MAX_VALUE, options)
      换句话说,它访问文件树的所有级别。

      返回的流包含对一个或多个打开目录的引用。通过关闭流来关闭这些目录。

      API 注意:
      必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开目录。
      参数:
      start - 起始文件
      options - 配置遍历的选项
      返回:
      StreamPath
      抛出:
      SecurityException - 如果安全管理器拒绝访问起始文件。对于默认提供程序,将调用checkRead方法来检查对目录的读取访问权限。
      IOException - 如果在访问起始文件时抛出I/O错误。
      自:
      1.8
      参见:
    • find

      public static Stream<Path> find(Path start, int maxDepth, BiPredicate<Path,BasicFileAttributes> matcher, FileVisitOption... options) throws IOException
      返回一个Stream,该流通过搜索以给定起始文件为根的文件树中的文件来延迟填充Path

      此方法以walk方法指定的方式精确遍历文件树。对于遇到的每个文件,将使用给定的BiPredicate调用其PathBasicFileAttributesPath对象是通过将相对路径与start进行解析获得的,并且仅在BiPredicate返回true时才包含在返回的Stream中。与在walk方法返回的Stream上调用filter相比,此方法可能更有效,因为它避免了冗余检索BasicFileAttributes

      返回的流包含对一个或多个打开目录的引用。通过关闭流来关闭这些目录。

      如果在从此方法返回后访问目录时抛出IOException,则会将其包装在UncheckedIOException中,该异常将从导致访问发生的方法中抛出。

      API 注意:
      必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开目录。
      参数:
      start - 起始文件
      maxDepth - 要搜索的目录级别的最大数量
      matcher - 用于决定文件是否应包含在返回流中的函数
      options - 配置遍历的选项
      返回:
      StreamPath
      抛出:
      IllegalArgumentException - 如果maxDepth参数为负
      SecurityException - 如果安全管理器拒绝访问起始文件。对于默认提供程序,将调用checkRead方法来检查对目录的读取访问权限。
      IOException - 如果在访问起始文件时抛出I/O错误。
      自:
      1.8
      参见:
    • lines

      public static Stream<String> lines(Path path, Charset cs) throws IOException
      从文件中读取所有行作为一个Stream。与readAllLines不同,此方法不会将所有行读入List,而是在流被消耗时懒惰地填充。

      文件中的字节使用指定的字符集解码为字符,并支持与readAllLines指定的相同行终止符。

      返回的流包含对打开文件的引用。通过关闭流来关闭文件。

      在终端流操作执行期间不应修改文件内容。否则,终端流操作的结果是未定义的。

      此方法返回后,如果在从文件读取时发生任何后续I/O异常,或者读取到了格式错误或无法映射的字节序列,则将其包装在一个UncheckedIOException中,该异常将从导致读取发生的Stream方法中抛出。如果在关闭文件时抛出IOException,也将其包装为UncheckedIOException

      API 注意:
      必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开文件。
      实现注意:
      此实现支持标准字符集UTF-8US-ASCIIISO-8859-1的良好并行流性能。这些行优化字符集具有这样的特性,即当随机访问文件的字节时,换行符('\n')或回车符('\r')的编码字节可以有效地识别出其他编码字符。

      对于非行优化字符集,流源的分割器具有较差的分割属性,类似于与迭代器关联的分割器或从BufferedReader.lines()返回的流关联的分割器。分割属性差可能导致并行流性能不佳。

      对于行优化字符集,流源的分割器具有良好的分割属性,假设文件包含一系列常规行。良好的分割属性可以导致良好的并行流性能。行优化字符集的分割器利用字符集属性(换行符或回车符的高效识别)在分割时可以将覆盖行数大致分成两半。

      参数:
      path - 文件的路径
      cs - 用于解码的字符集
      返回:
      文件中的行作为Stream
      抛出:
      IOException - 如果打开文件时发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对文件的读取访问权限。
      自:
      1.8
      参见:
    • lines

      public static Stream<String> lines(Path path) throws IOException
      从文件中读取所有行作为一个Stream。文件中的字节使用UTF-8 charset解码。

      返回的流包含对打开文件的引用。通过关闭流来关闭文件。

      在终端流操作执行期间不应修改文件内容。否则,终端流操作的结果是未定义的。

      此方法的工作方式相当于调用等效于评估以下表达式:

      Files.lines(path, StandardCharsets.UTF_8)
      API 注意:
      必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开文件。
      参数:
      path - 文件的路径
      返回:
      文件中的行作为Stream
      抛出:
      IOException - 如果打开文件时发生I/O错误
      SecurityException - 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead方法来检查对文件的读取访问权限。
      自:
      1.8