在大多数情况下,这里定义的方法将委托给相关的文件系统提供程序来执行文件操作。
- 自从:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionstatic long
copy
(InputStream in, Path target, CopyOption... options) 将输入流中的所有字节复制到文件中。static long
copy
(Path source, OutputStream out) 将文件中的所有字节复制到输出流中。static Path
copy
(Path source, Path target, CopyOption... options) 将文件复制到目标文件。static Path
createDirectories
(Path dir, FileAttribute<?>... attrs) 通过首先创建所有不存在的父目录来创建目录。static Path
createDirectory
(Path dir, FileAttribute<?>... attrs) 创建一个新目录。static Path
createFile
(Path path, FileAttribute<?>... attrs) 创建一个新的空文件,如果文件已经存在则失败。static Path
createLink
(Path link, Path existing) 为现有文件创建新链接(目录条目)(可选操作)。static Path
createSymbolicLink
(Path link, Path target, FileAttribute<?>... attrs) 创建到目标的符号链接(可选操作)。static Path
createTempDirectory
(String prefix, FileAttribute<?>... attrs) 在默认临时文件目录中使用给定前缀创建一个新目录。static Path
createTempDirectory
(Path dir, String prefix, FileAttribute<?>... attrs) 在指定目录中使用给定前缀创建一个新目录。static Path
createTempFile
(String prefix, String suffix, FileAttribute<?>... attrs) 在默认临时文件目录中使用给定前缀和后缀创建一个空文件。static Path
createTempFile
(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) 在指定目录中使用给定前缀和后缀字符串创建一个新的空文件。static void
删除文件。static boolean
deleteIfExists
(Path path) 如果文件存在,则删除文件。static boolean
exists
(Path path, LinkOption... options) 测试文件是否存在。find
(Path start, int maxDepth, BiPredicate<Path, BasicFileAttributes> matcher, FileVisitOption... options) 返回一个Stream
,通过在给定起始文件的文件树中搜索文件来懒惰地填充Path
。static Object
getAttribute
(Path path, String attribute, LinkOption... options) 读取文件属性的值。static <V extends FileAttributeView>
VgetFileAttributeView
(Path path, Class<V> type, LinkOption... options) 返回给定类型的文件属性视图。static FileStore
getFileStore
(Path path) 返回代表文件所在文件存储的FileStore
。static FileTime
getLastModifiedTime
(Path path, LinkOption... options) 返回文件的最后修改时间。static UserPrincipal
getOwner
(Path path, LinkOption... options) 返回文件的所有者。static Set
<PosixFilePermission> getPosixFilePermissions
(Path path, LinkOption... options) 返回文件的POSIX文件权限。static boolean
isDirectory
(Path path, LinkOption... options) 测试文件是否为目录。static boolean
isExecutable
(Path path) 测试文件是否可执行。static boolean
判断文件是否被视为隐藏。static boolean
isReadable
(Path path) 测试文件是否可读。static boolean
isRegularFile
(Path path, LinkOption... options) 测试文件是否为具有不透明内容的常规文件。static boolean
isSameFile
(Path path, Path path2) 测试两个路径是否指向同一个文件。static boolean
isSymbolicLink
(Path path) 测试文件是否为符号链接。static boolean
isWritable
(Path path) 测试文件是否可写。作为Stream
从文件中读取所有行。作为Stream
从文件中读取所有行。返回一个懒惰填充的Stream
,其中的元素是目录中的条目。static long
查找并返回两个文件内容中第一个不匹配字节的位置,如果没有不匹配则返回-1L
。static Path
move
(Path source, Path target, CopyOption... options) 将文件移动或重命名为目标文件。static BufferedReader
newBufferedReader
(Path path) 以读取模式打开文件,返回一个BufferedReader
以有效地从文件中读取文本。static BufferedReader
newBufferedReader
(Path path, Charset cs) 以读取模式打开文件,返回一个BufferedReader
,可用于以有效方式从文件中读取文本。static BufferedWriter
newBufferedWriter
(Path path, Charset cs, OpenOption... options) 以写入模式打开或创建文件,返回一个BufferedWriter
,可用于以有效方式向文件中写入文本。static BufferedWriter
newBufferedWriter
(Path path, OpenOption... options) 以写入模式打开或创建文件,返回一个BufferedWriter
,可用于以有效方式向文件中写入文本。static SeekableByteChannel
newByteChannel
(Path path, OpenOption... options) 打开或创建文件,返回一个可寻址的字节通道以访问文件。static SeekableByteChannel
newByteChannel
(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) 打开或创建文件,返回一个可寻址的字节通道以访问文件。static DirectoryStream
<Path> newDirectoryStream
(Path dir) 打开目录,返回一个DirectoryStream
,以迭代目录中的所有条目。static DirectoryStream
<Path> newDirectoryStream
(Path dir, String glob) 打开目录,返回一个DirectoryStream
,以迭代目录中的条目。static DirectoryStream
<Path> newDirectoryStream
(Path dir, DirectoryStream.Filter<? super Path> filter) 打开目录,返回一个DirectoryStream
,以迭代目录中的条目。static InputStream
newInputStream
(Path path, OpenOption... options) 打开文件,返回一个输入流以从文件中读取。static OutputStream
newOutputStream
(Path path, OpenOption... options) 打开或创建文件,返回一个输出流,可用于向文件中写入字节。static boolean
notExists
(Path path, LinkOption... options) 测试此路径指向的文件是否不存在。static String
probeContentType
(Path path) 探测文件的内容类型。static byte[]
readAllBytes
(Path path) 从文件中读取所有字节。readAllLines
(Path path) 从文件中读取所有行。readAllLines
(Path path, Charset cs) 从文件中读取所有行。static <A extends BasicFileAttributes>
AreadAttributes
(Path path, Class<A> type, LinkOption... options) 作为批量操作读取文件的属性。readAttributes
(Path path, String attributes, LinkOption... options) 作为批量操作读取一组文件属性。static String
readString
(Path path) static String
readString
(Path path, Charset cs) 从文件中读取所有字符到一个字符串中,使用指定的charset从字节解码为字符。static Path
readSymbolicLink
(Path link) 读取符号链接的目标(可选操作)。static Path
setAttribute
(Path path, String attribute, Object value, LinkOption... options) 设置文件属性的值。static Path
setLastModifiedTime
(Path path, FileTime time) 更新文件的最后修改时间属性。static Path
setOwner
(Path path, UserPrincipal owner) 更新文件所有者。static Path
setPosixFilePermissions
(Path path, Set<PosixFilePermission> perms) 设置文件的POSIX权限。static long
返回文件的大小(以字节为单位)。walk
(Path start, int maxDepth, FileVisitOption... options) 返回一个Stream
,通过在给定起始文件的文件树中遍历来懒惰地填充Path
。walk
(Path start, FileVisitOption... options) 返回一个Stream
,通过在给定起始文件的文件树中遍历来懒惰地填充Path
。static Path
walkFileTree
(Path start, FileVisitor<? super Path> visitor) 遍历文件树。static Path
walkFileTree
(Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor) 遍历文件树。static Path
write
(Path path, byte[] bytes, OpenOption... options) 向文件写入字节。static Path
write
(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options) 向文件写入文本行。static Path
write
(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) 向文件写入文本行。static Path
writeString
(Path path, CharSequence csq, Charset cs, OpenOption... options) 将CharSequence写入文件。static Path
writeString
(Path path, CharSequence csq, OpenOption... options) 将CharSequence写入文件。
-
Method Details
-
newInputStream
打开文件,返回一个输入流以从文件中读取。该流不会被缓冲,并且不需要支持mark
或reset
方法。该流对多个并发线程访问是安全的。读取从文件的开头开始。返回的流是否异步可关闭和/或可中断高度取决于文件系统提供程序的具体实现,因此未指定。options
参数确定如何打开文件。如果没有选项,则等效于使用READ
选项打开文件。除了READ
选项外,实现还可以支持其他特定于实现的选项。- 参数:
-
path
- 要打开的文件的路径 -
options
- 指定如何打开文件的选项 - 返回:
- 一个新的输入流
- 抛出:
-
IllegalArgumentException
- 如果指定了无效的选项组合 -
UnsupportedOperationException
- 如果指定了不支持的选项 -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对文件的读取访问权限。
-
newOutputStream
打开或创建文件,返回一个输出流,可用于向文件中写入字节。生成的流不会被缓冲。该流对多个并发线程访问是安全的。返回的流是否异步可关闭和/或可中断高度取决于文件系统提供程序的具体实现,因此未指定。此方法以与
newByteChannel
方法指定的方式打开或创建文件,唯一的区别是数组中可能不包含READ
选项。如果没有选项,则此方法的工作方式就像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它以写入模式打开文件,如果文件不存在,则创建文件,或者如果存在一个初始大小为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
参数确定文件如何打开。READ
和WRITE
选项确定文件是否应该用于读取和/或写入。如果既没有选项(或APPEND
选项),则文件将被打开以供读取。默认情况下,读取或写入从文件开头开始。除了
READ
和WRITE
之外,还可以存在以下选项:选项 描述 APPEND
如果存在此选项,则文件将被打开以供写入,并且每次调用通道的 write
方法都会先将位置移动到文件末尾,然后写入请求的数据。位置的移动和数据的写入是否在单个原子操作中完成取决于系统,因此未指定。此选项不能与READ
或TRUNCATE_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
打开一个目录,返回一个用于遍历目录中所有条目的DirectoryStream
。目录流的iterator
返回的元素是Path
类型,每个代表目录中的一个条目。获取的Path
对象就好像通过将目录条目的名称与dir
解析得到的一样。当不使用try-with-resources结构时,应在迭代完成后调用目录流的
close
方法,以释放为打开目录保留的任何资源。当实现支持在目录中的条目上以无竞争方式执行操作时,返回的目录流是一个
SecureDirectoryStream
。- 参数:
-
dir
- 目录的路径 - 返回:
-
一个新的打开的
DirectoryStream
对象 - 抛出:
-
NotDirectoryException
- 如果文件因为不是目录而无法打开 (可选的特定异常) -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead
方法来检查对目录的读取访问权限。
-
newDirectoryStream
打开一个目录,返回一个用于遍历目录中所有条目的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
方法,以释放为打开目录保留的任何资源。当过滤器由于未捕获的错误或运行时异常而终止时,它会传播到
hasNext
或next
方法。当抛出IOException
时,会导致hasNext
或next
方法抛出一个带有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
创建一个新的空文件,如果文件已经存在则失败。对文件的存在性检查和如果文件不存在则创建新文件的操作是一个原子操作,与可能影响目录的所有其他文件系统活动一样。attrs
参数是可选的file-attributes
,用于在创建文件时进行原子设置。每个属性由其name
标识。如果数组中包含同名属性超过一个,则除最后一个之外的所有属性都将被忽略。- 参数:
-
path
- 要创建的文件的路径 -
attrs
- 在创建文件时要原子设置的可选文件属性列表 - 返回:
- 文件
- 抛出:
-
UnsupportedOperationException
- 如果数组包含无法在创建文件时原子设置的属性 -
FileAlreadyExistsException
- 如果同名文件已经存在 (可选特定异常) -
IOException
- 如果发生I/O错误或父目录不存在 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite
方法来检查对新文件的写访问权限。
-
createDirectory
创建一个新目录。检查文件是否存在以及如果不存在则创建目录的操作是原子操作,与可能影响目录的所有其他文件系统活动一起。应该使用createDirectories
方法,以便首先创建所有不存在的父目录。参数
attrs
是可选的文件属性
,在创建目录时要原子设置。每个属性由其名称
标识。如果数组中包含同名属性,则除最后一个出现外,其余属性将被忽略。- 参数:
-
dir
- 要创建的目录 -
attrs
- 在创建目录时要原子设置的可选文件属性列表 - 返回:
- 目录
- 抛出:
-
UnsupportedOperationException
- 如果数组包含无法在创建目录时原子设置的属性 -
FileAlreadyExistsException
- 如果因同名文件已经存在而无法创建目录 (可选特定异常) -
IOException
- 如果发生I/O错误或父目录不存在 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite
方法来检查对新目录的写访问权限。
-
createDirectories
通过首先创建所有不存在的父目录来创建目录。与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
关联。文件名的构造方式是实现相关的,因此未指定。在可能的情况下,
prefix
和suffix
被用于以与File.createTempFile(String,String,File)
方法相同的方式构造候选名称。与
File.createTempFile
方法一样,此方法仅用作临时文件设施的一部分。当作为 工作文件 使用时,生成的文件可以使用DELETE_ON_CLOSE
选项打开,以便在调用适当的close
方法时删除文件。或者,可以使用shutdown-hook
或File.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-hook
或File.deleteOnExit()
机制自动删除目录。attrs
参数是可选的文件属性
,用于在创建目录时进行原子设置。每个属性由其名称
标识。如果数组中包含同名属性超过一个,则除最后一个外,其余均被忽略。- 参数:
-
dir
- 要在其中创建目录的目录路径 -
prefix
- 用于生成目录名称的前缀字符串;可以为null
-
attrs
- 创建目录时要原子设置的可选文件属性列表 - 返回:
- 在调用此方法之前不存在的新创建目录的路径
- 抛出:
-
IllegalArgumentException
- 如果无法使用前缀生成候选目录名称 -
UnsupportedOperationException
- 如果数组包含无法在创建目录时原子设置的属性 -
IOException
- 如果发生I/O错误或dir
不存在 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite
方法来检查创建目录时的写访问权限。
-
createTempDirectory
在默认临时文件目录中创建一个新目录,使用给定前缀生成其名称。生成的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
为现有文件创建一个新链接(目录条目)(可选操作)。link
参数定位要创建的目录条目。existing
参数是指向现有文件的路径。此方法为文件创建一个新的目录条目,以便可以使用link
作为路径访问该文件。在某些文件系统中,这称为创建“硬链接”。文件属性是为文件还是为每个目录条目维护的,这取决于文件系统,因此未指定。通常,文件系统要求文件的所有链接(目录条目)都在同一文件系统上。此外,在某些平台上,Java虚拟机可能需要以实现特定的权限启动才能创建硬链接或创建到目录的链接。- 参数:
-
link
- 要创建的链接(目录条目) -
existing
- 指向现有文件的路径 - 返回:
- 链接(目录条目)的路径
- 抛出:
-
UnsupportedOperationException
- 如果实现不支持将现有文件添加到目录中 -
FileAlreadyExistsException
- 如果由于同名文件已存在而无法创建条目 (可选特定异常) -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,它会拒绝LinkPermission
("hard")
或其checkWrite
方法拒绝对链接或现有文件的写访问权限。
-
delete
删除文件。实现可能需要检查文件以确定文件是否为目录。因此,该方法可能与其他文件系统操作不是原子的。如果文件是符号链接,则删除的是符号链接本身,而不是链接的最终目标。
如果文件是目录,则目录必须为空。在某些实现中,目录在创建时会有特殊文件或链接的条目。在这种实现中,只有特殊条目存在时,目录被视为空。此方法可与
walkFileTree
方法一起使用,以删除目录及目录中的所有条目,或者在需要时删除整个文件树。在某些操作系统上,当文件被Java虚拟机或其他程序打开并使用时,可能无法删除文件。
- 参数:
-
path
- 要删除的文件的路径 - 抛出:
-
NoSuchFileException
- 如果文件不存在 (可选特定异常) -
DirectoryNotEmptyException
- 如果文件是目录且由于目录不为空而无法删除 (可选特定异常) -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用SecurityManager.checkDelete(String)
方法来检查对文件的删除访问权限
-
deleteIfExists
如果存在,则删除文件。delete(Path)
方法一样,实现可能需要检查文件以确定文件是否为目录。因此,该方法可能与其他文件系统操作不是原子的。如果文件是符号链接,则删除的是符号链接本身,而不是链接的最终目标。如果文件是目录,则目录必须为空。在某些实现中,目录在创建时会有特殊文件或链接的条目。在这种实现中,只有特殊条目存在时,目录被视为空。
在某些操作系统上,当文件被Java虚拟机或其他程序打开并使用时,可能无法删除文件。
- 参数:
-
path
- 要删除的文件的路径 - 返回:
-
如果此方法删除了文件,则
true
; 如果文件不存在,则false
- 抛出:
-
DirectoryNotEmptyException
- 如果文件是目录且由于目录不为空而无法删除 (可选特定异常) -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用SecurityManager.checkDelete(String)
方法来检查对文件的删除访问权限。
-
copy
将文件复制到目标文件。此方法使用
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
移动或重命名文件到目标文件。默认情况下,此方法尝试将文件移动到目标文件,如果目标文件存在,则失败,除非源文件和目标文件是
相同
文件,在这种情况下,此方法不起作用。如果文件是符号链接,则移动的是符号链接本身,而不是链接的目标。此方法可用于移动空目录。在某些实现中,目录在创建时会有特殊文件或链接的条目。在这种实现中,只有存在特殊条目时目录才被视为空。当调用移动非空目录时,只有在不需要移动目录中的条目时才会移动目录。例如,在同一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
读取符号链接的目标(可选操作)。符号链接,则使用此方法读取链接的目标,如果文件不是符号链接,则失败。链接的目标不一定存在。返回的
Path
对象将与link
关联到相同的文件系统。- 参数:
-
link
- 符号链接的路径 - 返回:
-
表示链接目标的
Path
对象 - 抛出:
-
UnsupportedOperationException
- 如果实现不支持符号链接 -
NotLinkException
- 如果无法读取目标,因为文件不是符号链接 (可选特定异常) -
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,检查是否已授予FilePermission
的"readlink
"操作以读取链接。
-
getFileStore
返回表示文件所在文件存储的FileStore
。FileStore
的引用,如果对返回的FileStore
执行操作,或从中获取的FileStoreAttributeView
对象,是否继续依赖文件的存在是实现特定的。特别是对于文件被删除或移动到不同文件存储的情况,行为未定义。- 参数:
-
path
- 文件的路径 - 返回:
- 文件所在的文件存储
- 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,将调用checkRead
方法来检查对文件的读访问权限,并且还检查RuntimePermission
("getFileStoreAttributes")
-
isSameFile
测试两个路径是否定位到相同的文件。Path
对象均相等
,则此方法将返回true
,而无需检查文件是否存在。如果两个Path
对象与不同的提供程序关联,则此方法将返回false
。否则,此方法将检查两个Path
对象是否定位到相同的文件,并根据实现的不同,可能需要打开或访问两个文件。Paths
实现等价关系。- 它是自反的:对于
Path
f
,isSameFile(f,f)
应返回true
。 - 它是对称的:对于两个
Paths
f
和g
,isSameFile(f,g)
将等于isSameFile(g,f)
。 - 它是传递的:对于三个
Paths
f
,g
和h
,如果isSameFile(f,g)
返回true
且isSameFile(g,h)
返回true
,则isSameFile(f,h)
将返回true
。
- 参数:
-
path
- 文件的一个路径 -
path2
- 另一个路径 - 返回:
-
true
当且仅当两个路径定位到相同的文件时 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对两个文件的读取访问权限。 - 参见:
- 它是自反的:对于
-
mismatch
查找并返回两个文件内容中第一个不匹配字节的位置,如果没有不匹配则返回-1L
。位置将在包含范围内,从0L
到较小文件的大小(以字节为单位)。如果满足以下条件之一,则认为两个文件匹配:
否则,两个文件之间存在不匹配,此方法返回的值为:
- 第一个不匹配字节的位置,或
- 当文件大小不同且较小文件的每个字节与较大文件的对应字节相同时,较小文件的大小(以字节为单位)。
此方法可能不是原子的,关于其他文件系统操作。此方法始终是自反的(对于
Path f
,mismatch(f,f)
返回-1L
)。如果文件系统和文件保持静态,则此方法是对称的(对于两个Paths f
和g
,mismatch(f,g)
将返回与mismatch(g,f)
相同的值)。- 参数:
-
path
- 第一个文件的路径 -
path2
- 第二个文件的路径 - 返回:
-
第一个不匹配的位置,如果没有不匹配则返回
-1L
- 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对两个文件的读取访问权限。 - 自 JDK 版本:
- 12
-
isHidden
判断文件是否被视为隐藏。- API 注释:
-
隐藏的确切定义取决于平台或提供程序。例如,在 UNIX 上,如果文件名以句点字符('.')开头,则文件被视为隐藏。在 Windows 上,如果设置了 DOS
hidden
属性,则文件被视为隐藏。根据实现的不同,此方法可能需要访问文件系统以确定文件是否被视为隐藏。
- 参数:
-
path
- 要测试的文件的路径 - 返回:
-
true
如果文件被视为隐藏 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对文件的读取访问权限。
-
probeContentType
探测文件的内容类型。此方法使用已安装的
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);
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是标识一组文件属性的
FileAttributeView
的name
。如果未指定,则默认为"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是标识一组文件属性的
FileAttributeView
的name
。如果未指定,则默认为"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-name是
name
的FileAttributeView
,用于标识一组文件属性。如果未指定,则默认为"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
参数与支持PosixFileAttributeView
的FileSystem
相关联。此属性视图提供对与实现便携操作系统接口(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
参数与支持PosixFileAttributeView
的FileSystem
相关联。此属性视图提供对与实现便携操作系统接口(POSIX)系列标准的操作系统使用的文件相关的文件属性的访问。- 参数:
-
path
- 文件路径 -
perms
- 新的权限集 - 返回:
- 给定的路径
- 抛出:
-
UnsupportedOperationException
- 如果关联的文件系统不支持PosixFileAttributeView
-
ClassCastException
- 如果集合包含不是PosixFilePermission
类型的元素 -
IOException
- 如果发生I/O错误 -
SecurityException
- 对于默认提供程序,如果安装了安全管理器,并且它拒绝RuntimePermission
("accessUserInformation")
或其checkWrite
方法拒绝对文件的写访问。
-
getOwner
返回文件的所有者。path
参数与支持FileOwnerAttributeView
的文件系统相关联。此文件属性视图提供对文件所有者的文件属性的访问。- 参数:
-
path
- 文件路径 -
options
- 指示如何处理符号链接的选项 - 返回:
- 表示文件所有者的用户主体
- 抛出:
-
UnsupportedOperationException
- 如果关联的文件系统不支持FileOwnerAttributeView
-
IOException
- 如果发生I/O错误 -
SecurityException
- 对于默认提供程序,如果安装了安全管理器,并且它拒绝RuntimePermission
("accessUserInformation")
或其checkRead
方法拒绝对文件的读访问。
-
setOwner
更新文件所有者。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
测试文件是否为符号链接。如果需要区分I/O异常和文件不是符号链接的情况,则可以使用
readAttributes
方法读取文件属性,并使用BasicFileAttributes.isSymbolicLink()
方法测试文件类型。- 参数:
-
path
- 文件路径 - 返回:
-
如果文件是符号链接,则
true
; 如果文件不存在、不是符号链接或无法确定文件是否为符号链接,则false
。 - 抛出:
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead
方法拒绝对文件的读访问。
-
isDirectory
测试文件是否为目录。options
数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS
,则不会跟随符号链接。如果需要区分I/O异常和文件不是目录的情况,则可以使用
readAttributes
方法读取文件属性,并使用BasicFileAttributes.isDirectory()
方法测试文件类型。- 参数:
-
path
- 要测试的文件路径 -
options
- 指示如何处理符号链接的选项 - 返回:
-
如果文件是目录,则
true
; 如果文件不存在、不是目录或无法确定文件是否为目录,则false
。 - 抛出:
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead
方法拒绝对文件的读访问。
-
isRegularFile
测试文件是否为具有不透明内容的常规文件。options
数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS
,则不会跟随符号链接。如果需要区分I/O异常和文件不是常规文件的情况,则可以使用
readAttributes
方法读取文件属性,并使用BasicFileAttributes.isRegularFile()
方法测试文件类型。- 参数:
-
path
- 文件路径 -
options
- 指示如何处理符号链接的选项 - 返回:
-
如果文件是常规文件,则
true
; 如果文件不存在、不是常规文件或无法确定文件是否为常规文件,则false
。 - 抛出:
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead
方法拒绝对文件的读访问。
-
getLastModifiedTime
返回文件的最后修改时间。options
数组可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接并读取链接的最终目标的文件属性。如果存在选项NOFOLLOW_LINKS
,则不会跟随符号链接。- 参数:
-
path
- 文件路径 -
options
- 指示如何处理符号链接的选项 - 返回:
-
表示文件上次修改时间的
FileTime
,或者当文件系统不支持时间戳指示最后修改时间时的实现特定默认值 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead
方法拒绝对文件的读访问。 - 参见:
-
setLastModifiedTime
更新文件的最后修改时间属性。文件时间将转换为文件系统支持的时代和精度。从更精细到更粗粒度的转换会导致精度丢失。当尝试设置最后修改时间时,如果文件系统不支持或超出底层文件存储支持的范围,则此方法的行为未定义。可能会通过抛出IOException
失败,也可能不会失败。使用示例: 假设我们想将最后修改时间设置为当前时间:
Path path = ... FileTime now = FileTime.fromMillis(System.currentTimeMillis()); Files.setLastModifiedTime(path, now);
- 参数:
-
path
- 文件路径 -
time
- 新的最后修改时间 - 返回:
- 给定的路径
- 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器时,其checkWrite
方法拒绝对文件的写访问。 - 参见:
-
size
返回文件的大小(以字节为单位)。由于压缩、支持稀疏文件或其他原因,大小可能与文件系统上的实际大小不同。不是regular
文件的文件大小是实现特定的,因此未指定。- 参数:
-
path
- 文件路径 - 返回:
- 文件大小,以字节为单位
- 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器时,其checkRead
方法拒绝对文件的读访问。 - 参见:
-
exists
测试文件是否存在。参数
options
可用于指示如何处理符号链接,以防文件是符号链接。默认情况下,会跟随符号链接。如果存在选项NOFOLLOW_LINKS
,则不会跟随符号链接。请注意,此方法的结果立即过时。如果此方法指示文件存在,则不能保证后续访问将成功。在安全敏感应用程序中使用此方法时应格外小心。
- 参数:
-
path
- 要测试的文件路径 -
options
- 指示如何处理符号链接的选项 - 返回:
-
如果文件存在则返回
true
; 如果文件不存在或无法确定其存在则返回false
。 - 抛出:
-
SecurityException
- 在默认提供程序的情况下,将调用SecurityManager.checkRead(String)
来检查对文件的读取访问权限。 - 参见:
-
notExists
测试文件是否不存在。此方法适用于需要在确认文件不存在时采取操作的情况。参数
options
可用于指示如何处理文件为符号链接的情况。默认情况下,会跟随符号链接。如果选项NOFOLLOW_LINKS
存在,则不会跟随符号链接。请注意,此方法不是
exists
方法的补充。如果无法确定文件是否存在,则这两种方法都返回false
。与exists
方法一样,此方法的结果立即过时。如果此方法指示文件存在,则不能保证随后尝试创建文件将成功。在安全敏感应用程序中使用此方法时应格外小心。- 参数:
-
path
- 要测试的文件路径 -
options
- 指示如何处理符号链接的选项 - 返回:
-
如果文件不存在则返回
true
; 如果文件存在或无法确定其存在则返回false
- 抛出:
-
SecurityException
- 在默认提供程序的情况下,将调用SecurityManager.checkRead(String)
来检查对文件的读取访问权限。
-
isReadable
测试文件是否可读。此方法检查文件是否存在,并且此Java虚拟机具有允许打开文件进行读取的适当权限。根据实现方式,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以便检查对文件的有效访问权限。因此,此方法可能不是原子的,与其他文件系统操作无关。请注意,此方法的结果立即过时,不能保证随后尝试打开文件进行读取将成功(甚至访问相同文件)。在安全敏感应用程序中使用此方法时应格外小心。
- 参数:
-
path
- 要检查的文件路径 - 返回:
-
如果文件存在且可读则返回
true
; 如果文件不存在、由于Java虚拟机权限不足而拒绝读取访问,或无法确定访问权限则返回false
- 抛出:
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则将调用checkRead
来检查对文件的读取访问权限。
-
isWritable
测试文件是否可写。此方法检查文件是否存在,并且此Java虚拟机具有允许打开文件进行写入的适当权限。根据实现方式,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以便检查对文件的有效访问权限。因此,此方法可能不是原子的,与其他文件系统操作无关。请注意,此方法的结果立即过时,不能保证随后尝试打开文件进行写入将成功(甚至访问相同文件)。在安全敏感应用程序中使用此方法时应格外小心。
- 参数:
-
path
- 要检查的文件路径 - 返回:
-
如果文件存在且可写则返回
true
; 如果文件不存在、由于Java虚拟机权限不足而拒绝写入访问,或无法确定访问权限则返回false
- 抛出:
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则将调用checkWrite
来检查对文件的写入访问权限。
-
isExecutable
测试文件是否可执行。此方法检查文件是否存在,并且此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
遍历文件树。此方法的作用相当于评估以下表达式:
Files.walkFileTree(start, EnumSet.noneOf(FileVisitOption.class), Integer.MAX_VALUE, visitor)
- 参数:
-
start
- 起始文件 -
visitor
- 每个文件要调用的文件访问者 - 返回:
- 起始文件
- 抛出:
-
SecurityException
- 如果安全管理器拒绝访问起始文件。在默认提供程序的情况下,将调用checkRead
方法来检查对目录的读取访问权限。 -
IOException
- 如果访问者方法抛出I/O错误
-
newBufferedReader
为读取而打开文件,返回一个BufferedReader
,可用于以高效的方式从文件中读取文本。文件中的字节使用指定的字符集解码为字符。读取从文件的开头开始。从文件读取的
Reader
方法在读取到格式错误或无法映射的字节序列时会抛出IOException
。- 参数:
-
path
- 文件的路径 -
cs
- 用于解码的字符集 - 返回:
- 一个新的缓冲读取器,具有默认缓冲区大小,用于从文件中读取文本
- 抛出:
-
IOException
- 如果打开文件时发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,如果安装了安全管理器,则将调用checkRead
方法来检查对文件的读取访问权限。 - 参见:
-
newBufferedReader
为读取而打开文件,返回一个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
参数指定如何创建或打开文件。如果没有选项,则此方法的工作方式就好像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它会打开文件进行写入,如果文件不存在,则创建文件,或者如果存在一个初始大小为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
打开或创建文件以进行写入,返回一个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
将输入流中的所有字节复制到文件中。返回时,输入流将位于流的末尾。默认情况下,如果目标文件已经存在或是符号链接,则复制操作将失败。如果指定了
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
将文件中的所有字节复制到输出流中。如果在从文件读取或向输出流写入时发生I/O错误,则可能在读取或写入一些字节后发生错误。因此,输出流可能处于不一致的状态。强烈建议在发生I/O错误时立即关闭输出流。
此方法可能会无限期地阻塞写入输出流(或从文件读取)。对于输出流在复制过程中异步关闭或线程在复制过程中被中断的情况,其行为高度依赖于输出流和文件系统提供程序的具体实现,因此未指定。
- 参数:
-
source
- 文件路径 -
out
- 要写入的输出流 - 返回:
- 读取或写入的字节数
- 抛出:
-
IOException
- 如果在读取或写入时发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead
方法来检查对文件的读访问权限。
-
readAllBytes
从文件中读取所有字节。该方法确保在读取所有字节或抛出I/O错误或其他运行时异常时关闭文件。请注意,此方法适用于简单情况,其中将所有字节读入字节数组是方便的。不适用于读取大型文件。
- 参数:
-
path
- 文件路径 - 返回:
- 包含从文件中读取的字节的字节数组
- 抛出:
-
IOException
- 如果从流中读取时发生I/O错误 -
OutOfMemoryError
- 如果无法分配所需大小的数组,例如文件大于2GB
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead
方法来检查对文件的读访问权限。
-
readString
- 参数:
-
path
- 文件路径 - 返回:
- 包含从文件中读取的内容的字符串
- 抛出:
-
IOException
- 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列 -
OutOfMemoryError
- 如果文件非常大,例如大于2GB
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对文件的读取访问权限。 - 自:
- 11
-
readString
从文件中读取所有字符到一个字符串中,使用指定的字符集将字节解码为字符。该方法确保在所有内容被读取或发生I/O错误或其他运行时异常时关闭文件。此方法读取所有内容,包括中间和/或末尾的换行符。生成的字符串将包含文件中出现的换行符。
- API注释:
- 此方法适用于简单情况,适合将文件内容读取到字符串中。不适用于读取非常大的文件。
- 参数:
-
path
- 文件路径 -
cs
- 用于解码的字符集 - 返回:
- 包含从文件中读取的内容的字符串
- 抛出:
-
IOException
- 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列 -
OutOfMemoryError
- 如果文件非常大,例如大于2GB
-
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对文件的读取访问权限。 - 自:
- 11
-
readAllLines
从文件中读取所有行。该方法确保在所有字节被读取或发生I/O错误或其他运行时异常时关闭文件。从文件中的字节使用指定的字符集解码为字符。此方法将以下内容识别为行终止符:
\u000D
后跟\u000A
,回车后跟换行\u000A
,换行\u000D
,回车
将来的版本可能会识别其他Unicode行终止符。
请注意,此方法适用于简单情况,方便一次性读取所有行。不适用于读取大文件。
- 参数:
-
path
- 文件路径 -
cs
- 用于解码的字符集 - 返回:
-
文件中的行作为
List
返回;List
是否可修改取决于实现,因此未指定 - 抛出:
-
IOException
- 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对文件的读取访问权限。 - 参见:
-
readAllLines
从文件中读取所有行。从文件中的字节使用UTF-8
字符集
解码为字符。此方法的工作方式就好像调用它等效于评估表达式:
Files.readAllLines(path, StandardCharsets.UTF_8)
- 参数:
-
path
- 文件路径 - 返回:
-
文件中的行作为
List
返回;List
是否可修改取决于实现,因此未指定 - 抛出:
-
IOException
- 如果从文件读取时发生I/O错误或读取到格式错误或不可映射的字节序列 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则调用checkRead
方法来检查对文件的读取访问权限。 - 自:
- 1.8
-
write
向文件中写入字节。options
参数指定如何创建或打开文件。如果没有选项,则此方法的工作方式就好像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项。换句话说,它打开文件进行写入,如果文件不存在,则创建文件,或者将现有的常规文件
最初截断为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
参数指定如何创建或打开文件。如果没有选项,则此方法的工作方式就好像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项。换句话说,它打开文件进行写入,如果文件不存在,则创建文件,或者将现有的常规文件
最初截断为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
参数指定文件的创建或打开方式。如果没有提供选项,则此方法的工作方式等同于存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项。换句话说,它打开文件进行写入,如果文件不存在,则创建文件,或者将现有的regular-file
最初截断为0
大小。- 参数:
-
path
- 文件路径 -
csq
- 要写入的CharSequence -
cs
- 用于编码的字符集 -
options
- 指定文件打开方式的选项 - 返回:
- 文件路径
- 抛出:
-
IllegalArgumentException
- 如果options
包含无效的选项组合 -
IOException
- 写入或创建文件时发生I/O错误,或者无法使用指定的字符集对文本进行编码 -
UnsupportedOperationException
- 如果指定了不支持的选项 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkWrite
方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE
选项打开文件,则会调用checkDelete
方法来检查删除访问权限。 - 自 JDK 版本:
- 11
-
list
返回一个延迟填充的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
- 配置遍历的选项 - 返回:
-
Stream
的Path
流 - 抛出:
-
IllegalArgumentException
- 如果maxDepth
参数为负 -
SecurityException
- 如果安全管理器拒绝访问起始文件。对于默认提供程序,将调用checkRead
方法来检查对目录的读取访问权限。 -
IOException
- 如果在访问起始文件时抛出I/O错误。 - 自:
- 1.8
-
walk
返回一个Stream
,该流通过遍历以给定起始文件为根的文件树来延迟填充Path
。文件树以深度优先方式遍历,流中的元素是通过将相对路径与start
进行解析
获得的Path
对象。此方法的工作方式等同于评估以下表达式:
Files.walk(start, Integer.MAX_VALUE, options)
返回的流包含对一个或多个打开目录的引用。通过关闭流来关闭这些目录。
- API 注意:
- 必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开目录。
- 参数:
-
start
- 起始文件 -
options
- 配置遍历的选项 - 返回:
-
Stream
的Path
流 - 抛出:
-
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
调用其Path
和BasicFileAttributes
。Path
对象是通过将相对路径与start
进行解析
获得的,并且仅在BiPredicate
返回true时才包含在返回的Stream
中。与在walk
方法返回的Stream
上调用filter
相比,此方法可能更有效,因为它避免了冗余检索BasicFileAttributes
。返回的流包含对一个或多个打开目录的引用。通过关闭流来关闭这些目录。
如果在从此方法返回后访问目录时抛出
IOException
,则会将其包装在UncheckedIOException
中,该异常将从导致访问发生的方法中抛出。- API 注意:
- 必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开目录。
- 参数:
-
start
- 起始文件 -
maxDepth
- 要搜索的目录级别的最大数量 -
matcher
- 用于决定文件是否应包含在返回流中的函数 -
options
- 配置遍历的选项 - 返回:
-
Stream
的Path
流 - 抛出:
-
IllegalArgumentException
- 如果maxDepth
参数为负 -
SecurityException
- 如果安全管理器拒绝访问起始文件。对于默认提供程序,将调用checkRead
方法来检查对目录的读取访问权限。 -
IOException
- 如果在访问起始文件时抛出I/O错误。 - 自:
- 1.8
- 参见:
-
lines
从文件中读取所有行作为一个Stream
。与readAllLines
不同,此方法不会将所有行读入List
,而是在流被消耗时懒惰地填充。文件中的字节使用指定的字符集解码为字符,并支持与
readAllLines
指定的相同行终止符。返回的流包含对打开文件的引用。通过关闭流来关闭文件。
在终端流操作执行期间不应修改文件内容。否则,终端流操作的结果是未定义的。
此方法返回后,如果在从文件读取时发生任何后续I/O异常,或者读取到了格式错误或无法映射的字节序列,则将其包装在一个
UncheckedIOException
中,该异常将从导致读取发生的Stream
方法中抛出。如果在关闭文件时抛出IOException
,也将其包装为UncheckedIOException
。- API 注意:
- 必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开文件。
- 实现注意:
-
此实现支持标准字符集
UTF-8
、US-ASCII
和ISO-8859-1
的良好并行流性能。这些行优化字符集具有这样的特性,即当随机访问文件的字节时,换行符('\n')或回车符('\r')的编码字节可以有效地识别出其他编码字符。对于非行优化字符集,流源的分割器具有较差的分割属性,类似于与迭代器关联的分割器或从
BufferedReader.lines()
返回的流关联的分割器。分割属性差可能导致并行流性能不佳。对于行优化字符集,流源的分割器具有良好的分割属性,假设文件包含一系列常规行。良好的分割属性可以导致良好的并行流性能。行优化字符集的分割器利用字符集属性(换行符或回车符的高效识别)在分割时可以将覆盖行数大致分成两半。
- 参数:
-
path
- 文件的路径 -
cs
- 用于解码的字符集 - 返回:
-
文件中的行作为
Stream
- 抛出:
-
IOException
- 如果打开文件时发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead
方法来检查对文件的读取访问权限。 - 自:
- 1.8
- 参见:
-
lines
从文件中读取所有行作为一个Stream
。文件中的字节使用UTF-8
charset
解码。返回的流包含对打开文件的引用。通过关闭流来关闭文件。
在终端流操作执行期间不应修改文件内容。否则,终端流操作的结果是未定义的。
此方法的工作方式相当于调用等效于评估以下表达式:
Files.lines(path, StandardCharsets.UTF_8)
- API 注意:
- 必须在try-with-resources语句或类似的控制结构中使用此方法,以确保在流操作完成后及时关闭流的打开文件。
- 参数:
-
path
- 文件的路径 - 返回:
-
文件中的行作为
Stream
- 抛出:
-
IOException
- 如果打开文件时发生I/O错误 -
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,则会调用checkRead
方法来检查对文件的读取访问权限。 - 自:
- 1.8
-