在大多数情况下,此处定义的方法将委托给关联的文件系统提供程序来执行文件操作。
- 自从:
- 1.7
-
方法总结
修饰符和类型方法描述static 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) 通过在以给定起始文件为根的文件树中搜索文件,返回一个用Path
延迟填充的Stream
。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
告知文件是否被视为 hidden 。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) 通过遍历以给定起始文件为根的文件树,返回一个用Path
延迟填充的Stream
。walk
(Path start, FileVisitOption... options) 通过遍历以给定起始文件为根的文件树,返回一个用Path
延迟填充的Stream
。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 写入文件。
-
方法详情
-
newInputStream
打开一个文件,返回一个输入流以从文件中读取。流将不会被缓冲,并且不需要支持mark
或reset
方法。该流对于多个并发线程的访问是安全的。读取从文件的开头开始。返回的流是否为异步关闭and/or可中断的高度特定于文件系统提供程序,因此未指定。options
参数确定文件的打开方式。如果不存在任何选项,则相当于使用READ
选项打开文件。除了READ
选项,一个实现还可以支持额外的实现特定选项。- 参数:
path
- 要打开的文件的路径options
- 指定文件打开方式的选项- 返回:
- 一个新的输入流
- 抛出:
IllegalArgumentException
- 如果指定了无效的选项组合UnsupportedOperationException
- 如果指定了不支持的选项IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead
方法来检查对文件的读取访问权限。
-
newOutputStream
打开或创建文件,返回可用于将字节写入文件的输出流。结果流将不会被缓冲。该流对于多个并发线程的访问是安全的。返回的流是否为异步关闭and/or可中断的高度特定于文件系统提供程序,因此未指定。此方法完全按照
newByteChannel
方法指定的方式打开或创建文件,但READ
选项可能不存在于选项数组中。如果不存在任何选项,则此方法的工作方式就像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者最初将现有的regular-file
截断为0
的大小(如果存在)。使用示例:
Path path = ... // truncate and overwrite an existing file, or create the file if // it doesn't initially exist OutputStream out = Files.newOutputStream(path); // append to an existing file, fail if the file does not exist out = Files.newOutputStream(path, APPEND); // append to an existing file, create file if it doesn't initially exist out = Files.newOutputStream(path, CREATE, APPEND); // always create new file, failing if it already exists 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
之外,还可能存在以下选项:Option Description APPEND
如果存在此选项,则打开文件进行写入,每次调用通道的 write
方法首先将位置推进到文件末尾,然后写入请求的数据。位置的推进和数据的写入是否在单个原子操作中完成是系统相关的,因此未指定。此选项不能与READ
或TRUNCATE_EXISTING
选项一起使用。TRUNCATE_EXISTING
如果存在此选项,则现有文件将被截断为 0 字节的大小。当文件只为阅读而打开时,该选项将被忽略。 CREATE_NEW
如果存在此选项,则会创建一个新文件,如果该文件已经存在或者是一个符号链接,则会失败。创建文件时,检查文件是否存在以及文件不存在时的创建对于其他文件系统操作是原子的。当文件只为阅读而打开时,该选项将被忽略。 CREATE
如果存在此选项,则打开现有文件(如果存在),否则创建新文件。如果 CREATE_NEW
选项也存在或文件打开仅供阅读,则忽略此选项。DELETE_ON_CLOSE
如果存在此选项,则实现会在通过 close
方法关闭时尝试 best effort 删除文件。如果未调用close
方法,则在 Java 虚拟机终止时会尝试 best effort 删除该文件。SPARSE
创建新文件时,此选项是 hint 新文件将是稀疏的。不创建新文件时忽略此选项。 SYNC
要求对文件内容或元数据的每次更新都同步写入底层存储设备。 (参见 同步 I/O 文件完整性 )。 DSYNC
要求对文件内容的每次更新都同步写入底层存储设备。 (参见 同步 I/O 文件完整性 )。 一个实现也可能支持额外的实现特定选项。
attrs
参数是可选的file-attributes
以在创建新文件时自动设置。在默认提供程序的情况下,返回的可搜索字节通道是
FileChannel
。使用示例:
Path path = ... // open file for reading ReadableByteChannel rbc = Files.newByteChannel(path, EnumSet.of(READ))); // open file for writing to the end of an existing file, creating // the file if it doesn't already exist WritableByteChannel wbc = Files.newByteChannel(path, EnumSet.of(CREATE,APPEND)); // create file with initial permissions, opening it for both reading and writing 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
对象是通过resolving
目录条目的名称针对dir
获得的。当不使用 try-with-resources 构造时,应在迭代完成后调用目录流的
close
方法,以释放为打开的目录保留的任何资源。当实现支持以无竞争方式执行的目录条目操作时,返回的目录流是
SecureDirectoryStream
。- 参数:
dir
- 目录路径- 返回:
-
一个新的打开的
DirectoryStream
对象 - 抛出:
NotDirectoryException
- 如果文件因为不是目录而无法打开(可选的特定例外)IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead
方法来检查对目录的读取访问权限。
-
newDirectoryStream
打开一个目录,返回一个DirectoryStream
以迭代目录中的条目。目录流的iterator
返回的元素属于Path
类型,每个元素代表目录中的一个条目。Path
对象是通过resolving
目录条目的名称针对dir
获得的。迭代器返回的条目通过将其文件名的String
表示与给定的 globbing 模式匹配来进行过滤。例如,假设我们要遍历目录中以“.java”结尾的文件:
Path dir = ... try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.java")) { : }
通配模式由
getPathMatcher
方法指定。当不使用 try-with-resources 构造时,应在迭代完成后调用目录流的
close
方法,以释放为打开的目录保留的任何资源。当实现支持以无竞争方式执行的目录条目操作时,返回的目录流是
SecureDirectoryStream
。- 参数:
dir
- 目录路径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
对象是通过resolving
目录条目的名称针对dir
获得的。迭代器返回的条目由给定的filter
过滤。当不使用 try-with-resources 构造时,应在迭代完成后调用目录流的
close
方法,以释放为打开的目录保留的任何资源。如果过滤器因未捕获的错误或运行时异常而终止,则它会传播到
hasNext
或next
方法。在抛出IOException
的地方,它会导致hasNext
或next
方法抛出一个DirectoryIteratorException
并以IOException
为原因。当实现支持以无竞争方式执行的目录条目操作时,返回的目录流是
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
参数是可选的file-attributes
以在创建目录时自动设置。每个属性都由其name
标识。如果数组中包含多个同名属性,则忽略除最后一次出现的所有属性。- 参数:
dir
- 要创建的目录attrs
- 创建目录时要自动设置的可选文件属性列表- 返回:
- 目录
- 抛出:
UnsupportedOperationException
- 如果数组包含在创建目录时无法自动设置的属性FileAlreadyExistsException
- 如果因为同名文件已经存在而无法创建目录(可选的特定例外)IOException
- 如果发生 I/O 错误或父目录不存在SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,将调用checkWrite
方法来检查对新目录的写访问权限。
-
createDirectories
通过首先创建所有不存在的父目录来创建目录。与createDirectory
方法不同,如果目录已经存在而无法创建,则不会抛出异常。attrs
参数是可选的file-attributes
以在创建不存在的目录时自动设置。每个文件属性都由其name
标识。如果数组中包含多个同名属性,则忽略除最后一次出现的所有属性。如果此方法失败,那么它可能会在创建一些(但不是全部)父目录后这样做。
- 参数:
dir
- 要创建的目录attrs
- 创建目录时要自动设置的可选文件属性列表- 返回:
- 目录
- 抛出:
UnsupportedOperationException
- 如果数组包含在创建目录时无法自动设置的属性FileAlreadyExistsException
- 如果dir
存在但不是目录(可选的特定例外)IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,在尝试创建目录之前调用checkWrite
方法,并为检查的每个父目录调用其checkRead
方法。如果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
方法一样,此方法只是临时文件工具的一部分。在用作 work file 的情况下,可以使用DELETE_ON_CLOSE
选项打开生成的文件,以便在调用适当的close
方法时删除该文件。或者,可以使用shutdown-hook
或File.deleteOnExit()
机制自动删除文件。attrs
参数是可选的file-attributes
以在创建文件时自动设置。每个属性都由其name
标识。如果数组中包含多个同名属性,则忽略除最后一次出现的所有属性。如果未指定文件属性,则生成的文件可能对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
参数是可选的file-attributes
以在创建目录时自动设置。每个属性都由其name
标识。如果数组中包含多个同名属性,则忽略除最后一次出现的所有属性。- 参数:
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
参数是链接的目标。它可能是absolute
或相对路径,可能不存在。当目标是相对路径时,结果链接上的文件系统操作是相对于链接路径的。attrs
参数是可选的attributes
以在创建链接时自动设置。每个属性都由其name
标识。如果数组中包含多个同名属性,则忽略除最后一次出现的所有属性。如果支持符号链接,但底层
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
参数将文件复制到目标文件。默认情况下,如果目标文件已经存在或者是符号链接,复制将失败,除非源和目标是same
文件,在这种情况下,该方法完成而不复制文件。不需要将文件属性复制到目标文件。如果支持符号链接,并且文件是符号链接,则复制链接的最终目标。如果文件是目录,则会在目标位置创建一个空目录(不复制目录中的条目)。这个方法可以和walkFileTree
方法一起使用来复制一个目录和目录中的所有条目,或者整个文件树在需要的地方。options
参数可能包括以下任何一项:Option Description 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
将文件移动或重命名为目标文件。默认情况下,此方法尝试将文件移动到目标文件,如果目标文件存在则失败,除非源和目标是
same
文件,在这种情况下此方法无效。如果文件是符号链接,则移动符号链接本身,而不是链接的目标。可以调用此方法来移动空目录。在某些实现中,目录具有在创建目录时创建的特殊文件或链接的条目。在这样的实现中,当只有特殊条目存在时,目录被认为是空的。当调用移动非空目录时,如果不需要移动目录中的条目,则移动目录。例如,重命名同一FileStore
上的目录通常不需要移动目录中的条目。当移动目录需要移动其条目时,此方法将失败(通过抛出IOException
)。移动一个文件树可能涉及复制而不是移动目录,这可以结合使用copy
方法和Files.walkFileTree
实用程序方法来完成。options
参数可能包括以下任何一项:Option Description REPLACE_EXISTING
替换现有文件。无法替换非空目录。如果目标文件存在并且是符号链接,则替换符号链接本身,而不是链接的目标。 ATOMIC_MOVE
移动作为原子文件系统操作执行,所有其他选项都将被忽略。如果目标文件存在,那么如果现有文件被替换或者此方法因抛出 IOException
而失败,则它是特定于实现的。如果移动不能作为原子文件系统操作执行,则抛出AtomicMoveNotSupportedException
。例如,当目标位置位于不同的FileStore
并且需要复制文件时,或者目标位置与此对象的不同提供者相关联时,可能会出现这种情况。此接口的实现可能支持其他特定于实现的选项。
如果源文件存储和目标文件存储均支持,则移动文件会将
last-modified-time
复制到目标文件。复制文件时间戳可能会导致精度损失。实现也可以尝试复制其他文件属性,但如果无法复制文件属性,则不需要失败。当移动作为非原子操作执行并抛出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
对象都是equal
那么这个方法返回true
而不检查文件是否存在。如果两个Path
对象与不同的提供者关联,则此方法返回false
。否则,此方法会检查两个Path
对象是否找到同一个文件,并且根据实现,可能需要打开或访问这两个文件。如果文件系统和文件保持静态,则此方法实现非空
Paths
的等价关系。- 这是反身的:对于
Path
f
,isSameFile(f,f)
应该返回true
。 - 这是对称的:对于两个
Paths
f
和g
,isSameFile(f,g)
将等于isSameFile(g,f)
。 - 这是transitive:对于三个
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
方法来检查对这两个文件的读取访问权限。- 自从:
- 12
-
isHidden
告知文件是否被视为 hidden 。- API 注意:
-
隐藏的确切定义取决于平台或提供商。例如,在 UNIX 上,如果文件名以句点字符 ('.') 开头,则该文件被认为是隐藏的。在 Windows 上,如果设置了 DOS
hidden
属性,则认为文件是隐藏的。根据实现的不同,此方法可能需要访问文件系统以确定文件是否被认为是隐藏的。
- 参数:
path
- 要测试的文件的路径- 返回:
true
如果文件被认为是隐藏的- 抛出:
IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead
方法来检查对文件的读取访问权限。
-
probeContentType
探测文件的内容类型。此方法使用已安装的
FileTypeDetector
实现来探测给定文件以确定其内容类型。依次调用每个文件类型检测器的probeContentType
来检测文件类型。如果文件被识别,则返回内容类型。如果任何已安装的文件类型检测器都无法识别该文件,则会调用系统默认文件类型检测器来猜测内容类型。给定的 Java 虚拟机调用会维护一个系统范围的文件类型检测器列表。使用
ServiceLoader
类定义的服务提供商加载工具加载已安装的文件类型检测器。使用系统类加载器加载已安装的文件类型检测器。如果找不到系统类加载器,则使用平台类加载器。文件类型检测器通常通过将它们放置在应用程序类路径上的 JAR 文件中进行安装,JAR 文件在资源目录META-INF/services
中包含一个名为java.nio.file.spi.FileTypeDetector
的提供程序配置文件,并且该文件列出了一个或多个具体子类的完全限定名称FileTypeDetector
具有零参数构造函数。如果定位或实例化已安装文件类型检测器的过程失败,则会抛出一个未指定的错误。安装提供程序所在的顺序是特定于实现的。此方法的返回值是由 RFC 2045:多用途 Internet 邮件扩展 (MIME) 第一部分:Internet 邮件正文的格式 定义的多用途 Internet 邮件扩展 (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
参数标识要设置的属性并采用以下形式:[视图名称:]属性名
其中方括号 [...] 描述了一个可选组件,字符':'
代表它自己。视图名称是标识一组文件属性的
FileAttributeView
的name
。如果未指定,则默认为"basic"
,文件属性视图的名称,用于标识许多文件系统共有的基本文件属性集。属性名是集合中属性的名称。options
数组可用于指示在文件是符号链接的情况下如何处理符号链接。默认情况下,遵循符号链接并设置链接最终目标的文件属性。如果存在选项NOFOLLOW_LINKS
,则不遵循符号链接。使用示例:假设我们要设置 DOS 的“隐藏”属性:
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
参数标识要读取的属性并采用以下形式:[视图名称:]属性名
其中方括号 [...] 描述了一个可选组件,字符':'
代表它自己。视图名称是标识一组文件属性的
FileAttributeView
的name
。如果未指定,则默认为"basic"
,文件属性视图的名称,用于标识许多文件系统共有的基本文件属性集。属性名是属性的名称。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
参数标识要读取的属性并采用以下形式:[视图名称:]属性列表
其中方括号 [...] 描述了一个可选组件,字符':'
代表它自己。视图名称是标识一组文件属性的
FileAttributeView
的name
。如果未指定,则默认为"basic"
,文件属性视图的名称,用于标识许多文件系统共有的基本文件属性集。这属性列表component 是一个逗号分隔的列表,其中包含一个或多个要读取的属性名称。如果列表包含值
"*"
,则读取所有属性。不支持的属性将被忽略,并且不会出现在返回的map中。如果所有属性都作为相对于其他文件系统操作的原子操作读取,则它是特定于实现的。以下示例演示了
attributes
参数的可能值:示例 Description "*"
阅读所有 basic-file-attributes
。"size,lastModifiedTime,lastAccessTime"
读取文件大小、上次修改时间和上次访问时间属性。 "posix:*"
阅读所有 POSIX-file-attributes
。"posix:permissions,owner,size"
读取 POSIX 文件权限、所有者和文件大小。 options
数组可用于指示在文件是符号链接的情况下如何处理符号链接。默认情况下,遵循符号链接并读取链接最终目标的文件属性。如果存在选项NOFOLLOW_LINKS
,则不遵循符号链接。- 参数:
path
- 文件路径attributes
- 要读取的属性options
- 指示如何处理符号链接的选项- 返回:
- 返回的属性映射;map的键是属性名称,它的值是属性值
- 抛出:
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
如果文件存在且可读;false
如果文件不存在,读访问将被拒绝,因为Java虚拟机没有足够的权限,或者无法确定访问- 抛出:
SecurityException
- 在默认提供程序的情况下,并且安装了安全管理器,将调用checkRead
来检查对文件的读取访问权限。
-
isWritable
测试文件是否可写。此方法检查文件是否存在以及此 Java 虚拟机是否具有允许它打开文件进行写入的适当权限。根据实现的不同,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以检查对文件的有效访问。因此,此方法对于其他文件系统操作可能不是原子的。请注意,此方法的结果立即过时,无法保证后续尝试打开文件进行写入会成功(甚至无法保证它将访问同一文件)。在安全敏感的应用程序中使用此方法时应小心。
- 参数:
path
- 要检查的文件的路径- 返回:
true
如果文件存在且可写;false
如果文件不存在,写访问将被拒绝,因为Java虚拟机没有足够的权限,或者无法确定访问- 抛出:
SecurityException
- 在默认提供程序的情况下,安装了安全管理器,调用checkWrite
来检查对文件的写访问。
-
isExecutable
测试文件是否可执行。此方法检查文件是否存在以及此 Java 虚拟机是否具有execute
文件的适当权限。检查对目录的访问时,语义可能不同。例如,在 UNIX 系统上,检查执行访问检查 Java 虚拟机是否有权搜索目录以访问文件或子目录。根据实现的不同,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以检查对文件的有效访问。因此,此方法对于其他文件系统操作可能不是原子的。
请注意,此方法的结果立即过时,无法保证后续执行该文件的尝试一定会成功(甚至无法保证它将访问同一文件)。在安全敏感的应用程序中使用此方法时应小心。
- 参数:
path
- 要检查的文件的路径- 返回:
true
如果文件存在且可执行;false
如果文件不存在,执行访问将被拒绝,因为Java虚拟机权限不足,或者无法确定访问- 抛出:
SecurityException
- 在默认提供程序的情况下,安装了安全管理器,调用checkExec
来检查对文件的执行访问。
-
walkFileTree
public static Path walkFileTree(Path start, Set <FileVisitOption > options, int maxDepth, FileVisitor <? super Path > visitor) throws IOException 遍历文件树。此方法遍历以给定起始文件为根的文件树。文件树遍历是depth-first,为遇到的每个文件调用给定的
FileVisitor
。当树中的所有可访问文件都已访问或访问方法返回结果TERMINATE
时,文件树遍历完成。如果访问方法由于IOException
、未捕获的错误或运行时异常而终止,则遍历将终止,并将错误或异常传播给此方法的调用者。对于遇到的每个文件,此方法都会尝试读取其
BasicFileAttributes
。如果文件不是目录,则使用文件属性调用visitFile
方法。如果由于 I/O 异常而无法读取文件属性,则调用visitFileFailed
方法并出现 I/O 异常。如果文件是目录,并且目录无法打开,则调用
visitFileFailed
方法并出现 I/O 异常,此后,文件树遍历默认在目录的下一个 sibling 处继续。成功打开目录的地方,然后访问目录中的条目及其descendants。当所有条目都被访问过,或者在目录迭代期间发生 I/O 错误时,目录将关闭并调用访问者的
postVisitDirectory
方法。默认情况下,文件树遍历然后在目录的下一个 sibling 处继续。默认情况下,此方法不会自动遵循符号链接。如果
options
参数包含FOLLOW_LINKS
选项,则遵循符号链接。当跟随链接时,无法读取目标的属性,则此方法尝试获取链接的BasicFileAttributes
。如果可以读取它们,则使用链接的属性调用visitFile
方法(否则调用visitFileFailed
方法,如上所述)。如果
options
参数包含FOLLOW_LINKS
选项,则此方法会跟踪访问的目录,以便检测循环。当目录中有一个条目是该目录的祖先时,就会出现一个循环。循环检测是通过记录目录的file-key
来完成的,或者如果文件键不可用,则通过调用isSameFile
方法来测试目录是否与祖先文件相同。当检测到循环时,将其视为 I/O 错误,并使用FileSystemLoopException
的实例调用visitFileFailed
方法。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
选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者最初将现有的regular-file
截断为0
的大小(如果存在)。如果无法使用指定的字符集对文本进行编码,则写入文本的
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
charset
进行写入。此方法的工作原理就好像调用它等同于计算表达式:
Files.newBufferedWriter(path, StandardCharsets.UTF_8, options)
- 参数:
path
- 文件路径options
- 指定文件打开方式的选项- 返回:
- 一个新的缓冲写入器,具有默认缓冲区大小,用于将文本写入文件
- 抛出:
IllegalArgumentException
- 如果options
包含无效的选项组合IOException
- 如果打开或创建文件时发生 I/O 错误UnsupportedOperationException
- 如果指定了不支持的选项FileAlreadyExistsException
- 如果该名称的文件已经存在并且指定了CREATE_NEW
选项(可选的特定例外)SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkWrite
方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE
选项打开文件,则调用checkDelete
方法来检查删除访问。- 自从:
- 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 错误时立即关闭输出流。
此方法可能会无限期地阻止写入输出流(或从文件中读取)。输出流为异步关闭或者在复制期间中断的线程是高度输出流和文件系统提供程序特定的,因此未指定。
请注意,如果给定的输出流是
Flushable
,则可能需要在此方法完成后调用其flush
方法,以便刷新任何缓冲输出。- 参数:
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
将文件中的所有字符读入字符串,使用指定的 charset 从字节解码为字符。该方法确保在读取所有内容或抛出 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
charset
将文件中的字节解码为字符。此方法的工作原理就好像调用它等同于计算表达式:
Files.readAllLines(path, StandardCharsets.UTF_8)
- 参数:
path
- 文件路径- 返回:
-
文件中的行作为
List
;List
是否可修改取决于实现,因此未指定 - 抛出:
IOException
- 如果从文件读取时发生 I/O 错误,或者读取格式错误或不可映射的字节序列SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead
方法来检查对文件的读取访问权限。- 自从:
- 1.8
-
write
将字节写入文件。options
参数指定文件的创建或打开方式。如果不存在任何选项,则此方法的工作方式就像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者最初将现有的regular-file
截断为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 将文本行写入文件。每行都是一个 char 序列,并按顺序写入文件,每行以平台的行分隔符终止,如系统属性line.separator
所定义。使用指定的字符集将字符编码为字节。options
参数指定文件的创建或打开方式。如果不存在任何选项,则此方法的工作方式就像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者最初将现有的regular-file
截断为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
charset
将字符编码为字节。此方法的工作原理就好像调用它等同于计算表达式:
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
方法来检查删除访问。- 自从:
- 1.8
-
writeString
public static Path writeString(Path path, CharSequence csq, OpenOption ... options) throws IOException 将 CharSequence 写入文件。使用UTF-8
charset
将字符编码为字节。此方法等效于:
writeString(path, csq, StandardCharsets.UTF_8, options)
。- 参数:
path
- 文件路径csq
- 要写入的 CharSequenceoptions
- 指定文件打开方式的选项- 返回:
- 路径
- 抛出:
IllegalArgumentException
- 如果options
包含无效的选项组合IOException
- 如果写入或创建文件时发生 I/O 错误,或者无法使用 UTF-8 对文本进行编码UnsupportedOperationException
- 如果指定了不支持的选项SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkWrite
方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE
选项打开文件,则调用checkDelete
方法来检查删除访问。- 自从:
- 11
-
writeString
public static Path writeString(Path path, CharSequence csq, Charset cs, OpenOption ... options) throws IOException 将 CharSequence 写入文件。使用指定的 charset 将字符编码为字节。所有字符都按原样写入,包括 char 序列中的行分隔符。没有添加额外的字符。
options
参数指定文件的创建或打开方式。如果不存在任何选项,则此方法的工作方式就像存在CREATE
、TRUNCATE_EXISTING
和WRITE
选项一样。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或者最初将现有的regular-file
截断为0
的大小。- 参数:
path
- 文件路径csq
- 要写入的 CharSequencecs
- 用于编码的字符集options
- 指定文件打开方式的选项- 返回:
- 路径
- 抛出:
IllegalArgumentException
- 如果options
包含无效的选项组合IOException
- 如果写入或创建文件时发生 I/O 错误,或者无法使用指定的字符集对文本进行编码UnsupportedOperationException
- 如果指定了不支持的选项SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkWrite
方法来检查对文件的写访问权限。如果使用DELETE_ON_CLOSE
选项打开文件,则调用checkDelete
方法来检查删除访问。- 自从:
- 11
-
list
返回一个延迟填充的Stream
,其元素是目录中的条目。该列表不是递归的。流的元素是
Path
对象,就好像是通过resolving
目录条目的名称针对dir
获得的。一些文件系统维护到目录本身和目录的父目录的特殊链接。不包括代表这些链接的条目。流是弱一致.它是线程安全的,但在迭代时不会冻结目录,因此它可能(或可能不会)反映从此方法返回后发生的目录更新。
返回的流包含对打开目录的引用。通过关闭流关闭目录。
对关闭的流进行操作就像已到达流的末尾一样。由于预读,一个或多个元素可能会在流关闭后返回。
如果在此方法返回后访问目录时抛出
IOException
,则它会被包裹在UncheckedIOException
中,后者将从导致访问发生的方法中抛出。- API 注意:
- 此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保在流的操作完成后立即关闭流的打开目录。
- 参数:
dir
- 目录路径- 返回:
Stream
描述目录的内容- 抛出:
NotDirectoryException
- 如果文件因为不是目录而无法打开(可选的特定例外)IOException
- 如果打开目录时发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,将调用checkRead
方法来检查对目录的读取访问权限。- 自从:
- 1.8
- 参见:
-
walk
public static Stream <Path > walk(Path start, int maxDepth, FileVisitOption ... options) throws IOException 通过遍历以给定起始文件为根的文件树,返回一个用Path
延迟填充的Stream
。遍历文件树 depth-first ,流中的元素是Path
对象,就好像resolving
相对于start
的相对路径一样。stream
在元素被消耗时遍历文件树。返回的Stream
保证至少有一个元素,即起始文件本身。对于访问的每个文件,流都会尝试读取其BasicFileAttributes
。如果该文件是一个目录并且可以成功打开,则目录中的条目及其 descendants 将在遇到它们时跟随流中的目录。访问完所有条目后,目录将关闭。然后文件树遍历在目录的下一个 sibling 处继续。流是弱一致.它在迭代时不会冻结文件树,因此它可能(也可能不会)反映从此方法返回后发生的文件树更新。
默认情况下,此方法不会自动遵循符号链接。如果
options
参数包含FOLLOW_LINKS
选项,则遵循符号链接。当跟随链接时,无法读取目标的属性,则此方法尝试获取链接的BasicFileAttributes
。如果
options
参数包含FOLLOW_LINKS
选项,则流会跟踪访问过的目录,以便可以检测到循环。当目录中有一个条目是该目录的祖先时,就会出现一个循环。循环检测是通过记录目录的file-key
来完成的,或者如果文件键不可用,则通过调用isSameFile
方法来测试目录是否与祖先文件相同。当检测到循环时,它被视为 I/O 错误,并带有FileSystemLoopException
实例。maxDepth
参数是访问目录的最大层数。0
的值意味着只有起始文件被访问,除非被安全管理器拒绝。MAX_VALUE
的值可用于指示应访问所有级别。当安装了安全管理器并拒绝访问文件(或目录)时,它将被忽略并且不包含在流中。
返回的流包含对一个或多个打开目录的引用。通过关闭流关闭目录。
如果在此方法返回后访问目录时抛出
IOException
,则它会被包裹在UncheckedIOException
中,后者将从导致访问发生的方法中抛出。- API 注意:
- 此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保在流的操作完成后立即关闭流的打开目录。
- 参数:
start
- 起始文件maxDepth
- 要访问的最大目录级别数options
- 配置遍历的选项- 返回:
Path
的Stream
- 抛出:
IllegalArgumentException
- 如果maxDepth
参数为负SecurityException
- 如果安全管理器拒绝访问起始文件。对于默认提供程序,将调用checkRead
方法来检查对目录的读取访问权限。IOException
- 如果在访问起始文件时抛出 I/O 错误。- 自从:
- 1.8
-
walk
通过遍历以给定起始文件为根的文件树,返回一个用Path
延迟填充的Stream
。遍历文件树 depth-first ,流中的元素是Path
对象,就好像resolving
相对于start
的相对路径一样。此方法的工作原理就好像调用它等同于计算表达式:
换句话说,它访问文件树的所有级别。Files.walk(start, Integer.MAX_VALUE, options)
返回的流包含对一个或多个打开目录的引用。通过关闭流关闭目录。
- API 注意:
- 此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保在流的操作完成后立即关闭流的打开目录。
- 参数:
start
- 起始文件options
- 配置遍历的选项- 返回:
Path
的Stream
- 抛出:
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通过在以给定起始文件为根的文件树中搜索文件,返回一个用Path
延迟填充的Stream
。此方法完全按照
walk
方法指定的方式遍历文件树。对于遇到的每个文件,调用给定的BiPredicate
及其Path
和BasicFileAttributes
。Path
对象是通过resolving
相对于start
的相对路径获得的,并且仅在BiPredicate
返回真时包含在返回的Stream
中。与在walk
方法返回的Stream
上调用filter
相比,此方法通过避免冗余检索BasicFileAttributes
可能更有效。返回的流包含对一个或多个打开目录的引用。通过关闭流关闭目录。
如果在从该方法返回后访问目录时抛出
IOException
,则它被包装在UncheckedIOException
中,它将从导致访问发生的方法中抛出。- API 注意:
- 此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保在流的操作完成后立即关闭流的打开目录。
- 参数:
start
- 起始文件maxDepth
- 要搜索的最大目录级别数matcher
- 用于决定文件是否应包含在返回流中的函数options
- 配置遍历的选项- 返回:
Path
的Stream
- 抛出:
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
的良好并行流性能。这样的 line-optimal 字符集具有换行符 ('\n') 或回车符 ('\r') 的编码字节在随机访问文件字节时可以有效地从其他编码字符中识别出来的属性。对于非 line-optimal 字符集,流源的拆分器具有较差的拆分属性,类似于与迭代器关联的拆分器或与从
BufferedReader.lines()
返回的流关联的拆分器。较差的拆分属性会导致较差的并行流性能。对于 line-optimal 字符集,假设文件包含规则的行序列,流源的拆分器具有良好的拆分属性。良好的拆分特性可以带来良好的并行流性能。 line-optimal 字符集的拆分器利用字符集属性(换行符或回车符可有效识别),以便在拆分时它可以将覆盖的行数大致分成两半。
- 参数:
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
-