- 所有已实现的接口:
-
Serializable
,Comparable<File>
用户界面和操作系统使用系统相关的路径名字符串来命名文件和目录。这个类提供了一个抽象的、与系统无关的层次路径名视图。一个抽象路径名有两个组成部分:
- 一个可选的系统相关的前缀字符串,比如磁盘驱动器说明符,UNIX根目录的
"/"
,或Microsoft Windows UNC路径名的"\\\\"
,以及 - 一个零个或多个字符串名称的序列。
路径名字符串与抽象路径名之间的转换在本质上是系统相关的。当将抽象路径名转换为路径名字符串时,每个名称都由默认的分隔符字符分隔。默认的名称分隔符字符由系统属性file.separator
定义,并在这个类的公共静态字段separator
和separatorChar
中提供。当路径名字符串转换为抽象路径名时,其中的名称可以由默认的名称分隔符字符分隔,也可以由底层系统支持的任何其他名称分隔符字符分隔。
路径名,无论是抽象的还是字符串形式,都可以是绝对的或相对的。绝对路径名是完整的,不需要其他信息就可以定位它所表示的文件。相反,相对路径名必须根据从其他路径名获取的信息来解释。默认情况下,java.io
包中的类总是将相对路径名解析为当前用户目录。这个目录由系统属性user.dir
命名,通常是调用Java虚拟机的目录。
抽象路径名的父目录可以通过调用这个类的getParent()
方法来获得,它由路径名的前缀和路径名的名称序列中除了最后一个名称之外的每个名称组成。每个目录的绝对路径名是任何以该目录的绝对路径名开头的File
对象的祖先。例如,由抽象路径名"/usr"
表示的目录是由路径名"/usr/local/bin"
表示的目录的祖先。
前缀概念用于处理UNIX平台上的根目录,以及Microsoft Windows平台上的驱动器说明符、根目录和UNC路径名,如下所示:
- 对于UNIX平台,绝对路径名的前缀始终是
"/"
。相对路径名没有前缀。表示根目录的抽象路径名具有前缀"/"
和空名称序列。 - 对于Microsoft Windows平台,包含驱动器说明符的路径名的前缀由驱动器号后跟
":"
组成,如果路径名是绝对的,则可能后跟"\\"
。UNC路径名的前缀是"\\\\"
;主机名和共享名称是名称序列中的前两个名称。不指定驱动器的相对路径名没有前缀。
这个类的实例可能或可能不表示实际的文件系统对象,比如文件或目录。如果它确实表示这样的对象,则该对象位于一个分区中。分区是文件系统的操作系统特定的存储部分。单个存储设备(例如物理磁盘驱动器、闪存、CD-ROM)可能包含多个分区。该对象(如果有的话)将驻留在由这个路径名的绝对形式的某个祖先命名的分区上。
文件系统可能对实际文件系统对象上的某些操作实施限制,比如读取、写入和执行。这些限制统称为访问权限。文件系统可能对单个对象有多组访问权限。例如,一组可能适用于对象的所有者,另一组可能适用于所有其他用户。对象的访问权限可能导致这个类中的某些方法失败。
File
类的实例是不可变的;也就是说,一旦创建,由File
对象表示的抽象路径名将永远不会改变。
与java.nio.file
包的互操作性
java.nio.file
包定义了Java虚拟机访问文件、文件属性和文件系统的接口和类。这个API可以用来克服java.io.File
类的许多限制。可以使用toPath
方法获取一个使用File
对象表示的抽象路径的Path
,然后可以将结果的Path
与Files
类一起使用,以提供更高效和更广泛的访问额外文件操作、文件属性和I/O异常,以帮助诊断文件操作失败时的错误。
- 自版本:
- 1.0
- 参见:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
测试应用程序是否可以执行由这个抽象路径名表示的文件。boolean
canRead()
测试应用程序是否可以读取由这个抽象路径名表示的文件。boolean
canWrite()
测试应用程序是否可以修改由这个抽象路径名表示的文件。int
按字典顺序比较两个抽象路径名。boolean
如果且仅当尚不存在具有此名称的文件时,原子地创建由此抽象路径名命名的新空文件。static File
createTempFile
(String prefix, String suffix) 在默认临时文件目录中创建一个新的空文件,使用给定的前缀和后缀生成其名称。static File
createTempFile
(String prefix, String suffix, File directory) 在指定目录中使用给定的前缀和后缀字符串创建一个新的空文件。boolean
delete()
删除由这个抽象路径名表示的文件或目录。void
请求在虚拟机终止时删除由这个抽象路径名表示的文件或目录。boolean
测试这个抽象路径名是否与给定对象相等。boolean
exists()
测试由这个抽象路径名表示的文件或目录是否存在。返回这个抽象路径名的绝对形式。返回这个抽象路径名的绝对路径名字符串。返回这个抽象路径名的规范形式。返回这个抽象路径名的规范路径名字符串。long
返回由这个抽象路径名命名的分区中未分配的字节数。getName()
返回由这个抽象路径名表示的文件或目录的名称。返回这个抽象路径名的父目录的路径名字符串,如果这个路径名没有命名父目录,则返回null
。返回这个抽象路径名的父目录的抽象路径名,如果这个路径名没有命名父目录,则返回null
。getPath()
将这个抽象路径名转换为路径名字符串。long
返回由这个抽象路径名命名的分区的大小。long
返回由这个抽象路径名命名的分区中对这个虚拟机可用的字节数。int
hashCode()
为这个抽象路径名计算一个哈希码。boolean
测试这个抽象路径名是否是绝对的。boolean
测试由这个抽象路径名表示的文件是否是一个目录。boolean
isFile()
测试由这个抽象路径名表示的文件是否是一个普通文件。boolean
isHidden()
测试由这个抽象路径名表示的文件是否是一个隐藏文件。long
返回由这个抽象路径名表示的文件的最后修改时间。long
length()
返回由这个抽象路径名表示的文件的长度。String[]
list()
返回由这个抽象路径名表示的目录中的文件和目录的名称数组。String[]
list
(FilenameFilter filter) 返回由这个抽象路径名表示的目录中满足指定过滤器的文件和目录的名称数组。File[]
返回由这个抽象路径名表示的目录中的文件的抽象路径名数组。File[]
listFiles
(FileFilter filter) 返回由这个抽象路径名表示的目录中满足指定过滤器的文件和目录的抽象路径名数组。File[]
listFiles
(FilenameFilter filter) 返回由这个抽象路径名表示的目录中满足指定过滤器的文件和目录的抽象路径名数组。static File[]
列出可用的文件系统根目录。boolean
mkdir()
创建由这个抽象路径名命名的目录。boolean
mkdirs()
创建由这个抽象路径名命名的目录,包括任何必要但不存在的父目录。boolean
重命名由此抽象路径名表示的文件。boolean
setExecutable
(boolean executable) 一个方便的方法,用于为此抽象路径名设置所有者的执行权限。boolean
setExecutable
(boolean executable, boolean ownerOnly) 为此抽象路径名设置所有者或所有人的执行权限。boolean
setLastModified
(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。boolean
setReadable
(boolean readable) 一个方便的方法,用于为此抽象路径名设置所有者的读取权限。boolean
setReadable
(boolean readable, boolean ownerOnly) 为此抽象路径名设置所有者或所有人的读取权限。boolean
标记由此抽象路径名命名的文件或目录,以便只允许读取操作。boolean
setWritable
(boolean writable) 一个方便的方法,用于为此抽象路径名设置所有者的写入权限。boolean
setWritable
(boolean writable, boolean ownerOnly) 为此抽象路径名设置所有者或所有人的写入权限。toPath()
返回从此抽象路径名构造的java.nio.file.Path
对象。toString()
返回此抽象路径名的路径名字符串。toURI()
构造代表此抽象路径名的file:
URI。toURL()
已弃用。此方法不会自动转义URL中非法的字符。
-
Field Details
-
separatorChar
public static final char separatorChar系统相关的默认名称分隔符字符。此字段初始化为包含系统属性file.separator
值的第一个字符。在 UNIX 系统上,此字段的值为'/'
;在 Microsoft Windows 系统上,它是'\\'
。- 参见:
-
separator
系统相关的默认名称分隔符字符,以字符串形式表示。此字符串包含一个字符,即separatorChar
。 -
pathSeparatorChar
public static final char pathSeparatorChar系统相关的路径分隔符字符。此字段初始化为包含系统属性path.separator
值的第一个字符。此字符用于在作为 路径列表 给定的文件序列中分隔文件名。在 UNIX 系统上,此字符为':'
;在 Microsoft Windows 系统上,它是';'
。- 参见:
-
pathSeparator
系统相关的路径分隔符字符,以字符串形式表示。此字符串包含一个字符,即pathSeparatorChar
。
-
-
Constructor Details
-
File
通过将给定的路径名字符串转换为抽象路径名来创建一个新的File
实例。如果给定的字符串为空字符串,则结果是空的抽象路径名。- 参数:
-
pathname
- 路径名字符串 - 抛出:
-
NullPointerException
- 如果pathname
参数为null
-
File
从父路径名字符串和子路径名字符串创建一个新的File
实例。如果
parent
为null
,则新的File
实例将被创建,就好像在给定的child
路径名字符串上调用单参数File
构造函数一样。否则,将假定
parent
路径名字符串表示一个目录,而child
路径名字符串表示一个目录或文件。如果child
路径名字符串是绝对的,则以系统相关的方式将其转换为相对路径名。如果parent
是空字符串,则通过将child
转换为抽象路径名并将结果解析为系统相关的默认目录来创建新的File
实例。否则,将每个路径名字符串转换为抽象路径名,并将子抽象路径名解析为父路径名。- 参数:
-
parent
- 父路径名字符串 -
child
- 子路径名字符串 - 抛出:
-
NullPointerException
- 如果child
为null
-
File
从父抽象路径名和子路径名字符串创建一个新的File
实例。如果
parent
为null
,则新的File
实例将被创建,就好像在给定的child
路径名字符串上调用单参数File
构造函数一样。否则,将假定
parent
抽象路径名表示一个目录,而child
路径名字符串表示一个目录或文件。如果child
路径名字符串是绝对的,则以系统相关的方式将其转换为相对路径名。如果parent
是空抽象路径名,则通过将child
转换为抽象路径名并将结果解析为系统相关的默认目录来创建新的File
实例。否则,将每个路径名字符串转换为抽象路径名,并将子抽象路径名解析为父路径名。- 参数:
-
parent
- 父抽象路径名 -
child
- 子路径名字符串 - 抛出:
-
NullPointerException
- 如果child
为null
-
File
通过将给定的file:
URI 转换为抽象路径名来创建一个新的File
实例。file:
URI 的确切形式是系统相关的,因此此构造函数执行的转换也是系统相关的。对于给定的抽象路径名 f,可以保证
new File(
f.
ftoURI
()).equals(.
getAbsoluteFile
())file:
URI 被转换为在另一个操作系统上的虚拟机中的抽象路径名时,通常不会保持这种关系。- 参数:
-
uri
- 具有方案等于"file"
、非空路径组件和未定义授权、查询和片段组件的绝对分层 URI - 抛出:
-
NullPointerException
- 如果uri
为null
-
IllegalArgumentException
- 如果参数的前提条件不成立 - 自:
- 1.4
- 参见:
-
-
Method Details
-
getName
返回由此抽象路径名表示的文件或目录的名称。这只是路径名的名称序列中的最后一个名称。如果路径名的名称序列为空,则返回空字符串。- 返回:
- 由此抽象路径名表示的文件或目录的名称,如果此路径名的名称序列为空,则返回空字符串
-
getParent
返回此抽象路径名的父目录的路径名字符串,如果此路径名不命名父目录,则返回null
。抽象路径名的父目录由路径名的前缀(如果有)和路径名的名称序列中除最后一个名称外的每个名称组成。如果名称序列为空,则路径名不命名父目录。
- 返回:
-
由此抽象路径名命名的父目录的路径名字符串,如果此路径名不命名父目录,则返回
null
-
getParentFile
返回此抽象路径名的父目录的抽象路径名,如果此路径名不命名父目录,则返回null
。抽象路径名的父目录由路径名的前缀(如果有)和路径名的名称序列中除最后一个名称外的每个名称组成。如果名称序列为空,则路径名不命名父目录。
- 返回:
-
由此抽象路径名命名的父目录的抽象路径名,如果此路径名不命名父目录,则返回
null
- 自:
- 1.2
-
getPath
将此抽象路径名转换为路径名字符串。生成的字符串使用默认名称分隔符字符
来分隔名称序列中的名称。- 返回:
- 此抽象路径名的字符串形式
-
isAbsolute
public boolean isAbsolute()测试此抽象路径名是否为绝对路径名。绝对路径名的定义是系统相关的。在 UNIX 系统上,如果路径名的前缀是"/"
,则路径名是绝对的。在 Microsoft Windows 系统上,如果路径名的前缀是驱动器说明符后跟"\\"
,或者前缀是"\\\\"
,则路径名是绝对的。- 返回:
-
如果此抽象路径名是绝对路径名,则返回
true
,否则返回false
-
getAbsolutePath
返回此抽象路径名的绝对路径名字符串。如果此抽象路径名已经是绝对路径名,则路径名字符串将简单地返回,就像通过
getPath()
方法一样。如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性user.dir
命名。否则,此路径名将以系统相关的方式解析。在 UNIX 系统上,通过将相对路径名解析为当前用户目录来使相对路径名变为绝对路径名。在 Microsoft Windows 系统上,通过将相对路径名解析为由路径名命名的驱动器的当前目录(如果有)来使相对路径名变为绝对路径名;如果没有,则解析为当前用户目录。- 返回:
- 返回表示与此抽象路径名相同文件或目录的绝对路径名字符串
- 抛出:
-
SecurityException
- 如果无法访问所需的系统属性值。 - 参见:
-
getAbsoluteFile
返回此抽象路径名的绝对形式。等效于new File(this.
。getAbsolutePath()
)- 返回:
- 返回表示与此抽象路径名相同文件或目录的绝对抽象路径名
- 抛出:
-
SecurityException
- 如果无法访问所需的系统属性值。 - 自:
- 1.2
-
getCanonicalPath
返回此抽象路径名的规范路径名字符串。规范路径名既是绝对的又是唯一的。规范形式的精确定义取决于系统。如果需要,此方法首先将此路径名转换为绝对形式,就像调用
getAbsolutePath()
方法一样,然后以系统相关的方式将其映射到其唯一形式。这通常涉及从路径名中删除冗余名称,解析符号链接(在UNIX平台上),并将驱动器字母转换为标准大小写(在Microsoft Windows平台上)。每个表示现有文件或目录的路径名都有一个唯一的规范形式。每个表示不存在的文件或目录的路径名也有一个唯一的规范形式。表示不存在的文件或目录的路径名的规范形式可能与在创建文件或目录之后相同路径名的规范形式不同。同样,表示现有文件或目录的路径名的规范形式可能与在删除文件或目录之后相同路径名的规范形式不同。
- 返回:
- 返回表示与此抽象路径名相同文件或目录的规范路径名字符串
- 抛出:
-
IOException
- 如果发生I/O错误,因为构造规范路径名可能需要文件系统查询 -
SecurityException
- 如果无法访问所需的系统属性值,或者如果存在安全管理器并且其SecurityManager.checkRead(java.io.FileDescriptor)
方法拒绝对文件的读取访问 - 自:
- 1.1
- 参见:
-
getCanonicalFile
返回此抽象路径名的规范形式。等效于new File(this.
。getCanonicalPath()
)- 返回:
- 返回表示与此抽象路径名相同文件或目录的规范路径名字符串
- 抛出:
-
IOException
- 如果发生I/O错误,因为构造规范路径名可能需要文件系统查询 -
SecurityException
- 如果无法访问所需的系统属性值,或者如果存在安全管理器并且其SecurityManager.checkRead(java.io.FileDescriptor)
方法拒绝对文件的读取访问 - 自:
- 1.2
- 参见:
-
toURL
Deprecated.将此抽象路径名转换为file:
URL。URL的确切形式取决于系统。如果可以确定由此抽象路径名表示的文件是目录,则生成的URL将以斜杠结尾。- 返回:
- 表示等效文件URL的URL对象
- 抛出:
-
MalformedURLException
- 如果无法将路径解析为URL - 自:
- 1.2
- 参见:
-
toURI
构造表示此抽象路径名的file:
URI。URI的确切形式取决于系统。如果可以确定由此抽象路径名表示的文件是目录,则生成的URI将以斜杠结尾。
对于给定的抽象路径名 f,可以保证
new
fFile
(.toURI()).equals(
f.
getAbsoluteFile
())file:
URI 转换为在另一个操作系统上的虚拟机中的抽象路径名时,通常不会保持此关系。请注意,当此抽象路径名表示UNC路径名时,UNC 的所有组件(包括服务器名称组件)都将被编码在
URI
路径中。权限组件未定义,这意味着它表示为null
。Path
类定义了toUri
方法,以在生成的URI
的权限组件中编码服务器名称。可以使用toPath
方法获取表示此抽象路径名的Path
。- 返回:
-
具有与
"file"
相等方案的绝对分层 URI,路径表示此抽象路径名,未定义权限、查询和片段组件 - 抛出:
-
SecurityException
- 如果无法访问所需的系统属性值。 - 自:
- 1.4
- 参见:
-
canRead
public boolean canRead()测试应用程序是否可以读取由此抽象路径名表示的文件。在某些平台上,可能可以以特权启动Java虚拟机,使其能够读取标记为不可读的文件。因此,即使文件没有读取权限,此方法可能返回true
。- 返回:
-
仅当应用程序可以读取此抽象路径名指定的文件且文件存在时返回
true
;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
-
canWrite
public boolean canWrite()测试应用程序是否可以修改由此抽象路径名表示的文件。在某些平台上,可能可以以特权启动Java虚拟机,使其能够修改标记为只读的文件。因此,即使文件标记为只读,此方法可能返回true
。- 返回:
-
仅当文件系统实际包含由此抽象路径名表示的文件且应用程序被允许写入文件时返回
true
;否则返回false
。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写入访问
-
exists
public boolean exists()测试由此抽象路径名表示的文件或目录是否存在。- 返回:
-
仅当由此抽象路径名表示的文件或目录存在时返回
true
;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件或目录的读取访问
-
isDirectory
public boolean isDirectory()测试由此抽象路径名表示的文件是否为目录。如果需要区分I/O异常和文件不是目录的情况,或者同时需要同一文件的多个属性,则可以使用
Files.readAttributes
方法。- 返回:
-
仅当由此抽象路径名表示的文件存在且为目录时返回
true
;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
-
isFile
public boolean isFile()检查此抽象路径名表示的文件是否为普通文件。如果文件不是目录,并且满足其他系统相关标准,则文件是普通的。Java应用程序创建的任何非目录文件都保证是普通文件。如果需要区分I/O异常和文件不是普通文件的情况,或者同时需要同一文件的多个属性,则可以使用
Files.readAttributes
方法。- 返回值:
-
true
表示仅当此抽象路径名表示的文件存在且为普通文件时;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
-
isHidden
public boolean isHidden()检查此抽象路径名命名的文件是否为隐藏文件。 隐藏的确切定义取决于系统。在UNIX系统上,如果文件名以句点字符('.'
)开头,则文件被视为隐藏。在Microsoft Windows系统上,如果文件在文件系统中被标记为隐藏,则被视为隐藏文件。- 返回值:
-
true
表示仅当此抽象路径名表示的文件根据底层平台的约定是隐藏的时 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问 - 自 JDK 版本:
- 1.2
-
lastModified
public long lastModified()返回此抽象路径名表示的文件上次修改的时间。- API 注释:
-
返回值的时间单位是毫秒,但值的粒度取决于底层文件系统,可能更大。例如,一些文件系统使用以秒为单位的时间戳。
如果需要区分I/O异常和返回
0L
的情况,或者同时需要同一文件的多个属性,或者需要上次访问时间或创建时间,则可以使用Files.readAttributes
方法。但如果只需要上次修改时间,则可以使用Files.getLastModifiedTime
方法。 - 返回值:
-
一个
long
值,表示文件上次修改的时间,以自 1970 年 1 月 1 日 00:00:00 GMT(格林尼治时间)起的毫秒数,如果文件不存在或发生I/O错误,则返回0L
。该值可能为负,表示在时代之前的毫秒数 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
-
length
public long length()返回此抽象路径名表示的文件的长度。如果此路径名表示目录,则返回值未指定。如果需要区分I/O异常和返回
0L
的情况,或者同时需要同一文件的多个属性,则可以使用Files.readAttributes
方法。- 返回值:
-
此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,则返回
0L
。某些操作系统可能对表示设备或管道等系统相关实体的路径名返回0L
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)
方法拒绝对文件的读取访问
-
createNewFile
如果尚未存在具有此名称的文件,则以此抽象路径名命名的新文件将被原子方式创建为空文件。对文件的存在性进行检查以及如果文件不存在则创建文件是一个原子操作,与可能影响文件的所有其他文件系统活动一起。注意:不应将此方法用于文件锁定,因为无法可靠地使生成的协议正常工作。应改用
FileLock
功能。- 返回值:
-
如果命名文件不存在并且成功创建,则返回
true
;如果命名文件已经存在,则返回false
- 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写入访问 - 自 JDK 版本:
- 1.2
-
delete
public boolean delete()删除此抽象路径名表示的文件或目录。如果此路径名表示目录,则必须为空目录才能删除该目录。请注意,
Files
类定义了delete
方法,当无法删除文件时会抛出IOException
。这对于错误报告和诊断无法删除文件的原因很有用。- 返回值:
-
如果文件或目录成功删除,则返回
true
;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkDelete(java.lang.String)
方法拒绝对文件的删除访问
-
deleteOnExit
public void deleteOnExit()请求在虚拟机终止时删除此抽象路径名表示的文件或目录。文件(或目录)按照注册顺序的相反顺序删除。调用此方法删除已经注册删除的文件或目录不会产生任何效果。仅当按照Java语言规范定义的虚拟机正常终止时,才会尝试删除文件。一旦请求删除,就无法取消请求。因此,应谨慎使用此方法。
注意:不应将此方法用于文件锁定,因为无法可靠地使生成的协议正常工作。应改用
FileLock
功能。- 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkDelete(java.lang.String)
方法拒绝对文件的删除访问 - 自 JDK 版本:
- 1.2
- 参见:
-
list
返回此抽象路径名表示的目录中的文件和目录的名称数组。如果此抽象路径名不表示目录,则此方法返回
null
。否则,返回一个字符串数组,其中每个字符串对应目录中的每个文件或目录。不包括表示目录本身和父目录的名称在结果中。每个字符串是文件名而不是完整路径。不能保证结果数组中的名称字符串以任何特定顺序出现;特别是不能保证按字母顺序出现。
请注意,
Files
类定义了newDirectoryStream
方法,用于打开目录并遍历目录中文件的名称。在处理非常大的目录时,可能使用更少的资源,并且在处理远程目录时可能更具响应性。- 返回值:
-
返回此抽象路径名表示的目录中的文件和目录的名称数组。如果目录为空,则数组为空。如果此抽象路径名不表示目录,或者发生I/O错误,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(String)
方法拒绝对目录的读取访问
-
list
返回此抽象路径名表示的目录中满足指定过滤器的文件和目录的名称数组。此方法的行为与list()
方法相同,只是返回数组中的字符串必须满足过滤器。如果给定的filter
为null
,则接受所有名称。否则,当在此抽象路径名上调用过滤器的FilenameFilter.accept(File, String)
方法时,如果结果为true
,则名称满足过滤器。- 参数:
-
filter
- 文件名过滤器 - 返回:
-
一个字符串数组,命名了此抽象路径名所表示的目录中被给定
filter
接受的文件和目录。如果目录为空或者没有任何名称被过滤器接受,则数组将为空。如果此抽象路径名不表示目录,或者发生I/O错误,则返回null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(String)
方法拒绝对目录的读取访问 - 参见:
-
listFiles
返回一个命名了此抽象路径名所表示的目录中文件的抽象路径名数组。如果此抽象路径名不表示目录,则此方法返回
null
。否则,返回一个File
对象数组,每个文件或目录在数组中对应一个对象。不包括表示目录本身和目录的父目录的路径名在结果中。每个生成的抽象路径名都是使用此抽象路径名和File(File, String)
构造函数构造的。因此,如果此路径名是绝对路径,则每个生成的路径名也是绝对路径;如果此路径名是相对路径,则每个生成的路径名将相对于相同的目录。不能保证结果数组中的名称字符串以任何特定顺序出现;特别地,不能保证它们按字母顺序出现。
请注意,
Files
类定义了newDirectoryStream
方法,用于打开目录并遍历目录中文件的名称。在处理非常大的目录时,这可能会使用更少的资源。- 返回:
-
一个命名了此抽象路径名所表示的目录中文件和目录的抽象路径名数组。如果目录为空,则数组为空。如果此抽象路径名不表示目录,或者发生I/O错误,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(String)
方法拒绝对目录的读取访问 - 自版本:
- 1.2
-
listFiles
返回一个命名了此抽象路径名所表示的目录中满足指定过滤器的文件和目录的抽象路径名数组。此方法的行为与listFiles()
方法相同,只是返回数组中的路径名必须满足过滤器。如果给定的filter
为null
,则接受所有路径名。否则,只有当在此抽象路径名上调用过滤器的FilenameFilter.accept(File, String)
方法并且文件或目录的名称满足过滤器时,路径名才满足过滤器。- 参数:
-
filter
- 文件名过滤器 - 返回:
-
一个命名了此抽象路径名所表示的目录中文件和目录的抽象路径名数组。如果目录为空,则数组为空。如果此抽象路径名不表示目录,或者发生I/O错误,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(String)
方法拒绝对目录的读取访问 - 自版本:
- 1.2
- 参见:
-
listFiles
返回一个命名了此抽象路径名所表示的目录中满足指定过滤器的文件和目录的抽象路径名数组。此方法的行为与listFiles()
方法相同,只是返回数组中的路径名必须满足过滤器。如果给定的filter
为null
,则接受所有路径名。否则,只有当在此抽象路径名上调用过滤器的FileFilter.accept(File)
方法并且路径名满足过滤器时,路径名才满足过滤器。- 参数:
-
filter
- 文件过滤器 - 返回:
-
一个命名了此抽象路径名所表示的目录中文件和目录的抽象路径名数组。如果目录为空,则数组为空。如果此抽象路径名不表示目录,或者发生I/O错误,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(String)
方法拒绝对目录的读取访问 - 自版本:
- 1.2
- 参见:
-
mkdir
public boolean mkdir()创建由此抽象路径名命名的目录。- 返回:
-
true
仅当目录已创建时;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法不允许创建指定名称的目录
-
mkdirs
public boolean mkdirs()创建由此抽象路径名命名的目录,包括所有必要但不存在的父目录。请注意,如果此操作失败,则可能已成功创建某些必要的父目录。- 返回:
-
true
仅当目录及所有必要的父目录已创建时;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)
方法不允许验证指定目录及所有必要的父目录的存在;或者如果SecurityManager.checkWrite(java.lang.String)
方法不允许创建指定目录及所有必要的父目录
-
renameTo
重命名由此抽象路径名表示的文件。此方法的许多行为方面在本质上依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,可能不是原子操作,如果目标抽象路径名已存在文件,则可能不会成功。应始终检查返回值,以确保重命名操作成功。由于
File
的实例是不可变的,因此此File对象不会更改为命名目标文件或目录。- 参数:
-
dest
- 命名文件的新抽象路径名 - 返回:
-
true
仅当重命名成功时;否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对旧路径名或新路径名的写访问 -
NullPointerException
- 如果参数dest
为null
-
setLastModified
public boolean setLastModified(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。所有平台都支持文件修改时间精确到最近的秒,但有些提供更高的精度。参数将被截断以适应支持的精度。如果操作成功且文件没有发生其他操作,则下一次调用
lastModified()
方法将返回传递给此方法的(可能被截断的)time
参数。- 参数:
-
time
- 新的最后修改时间,以自1970年1月1日00:00:00 GMT起的毫秒数表示 - 返回:
-
true
仅当操作成功时;否则返回false
- 抛出:
-
IllegalArgumentException
- 如果参数为负数 -
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对命名文件的写访问 - 自版本:
- 1.2
-
setReadOnly
public boolean setReadOnly()标记此抽象路径名表示的文件或目录,以便仅允许读取操作。调用此方法后,文件或目录将不会更改,直到它被删除或标记为允许写访问。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许修改标记为只读的文件。只读文件或目录是否可以被删除取决于底层系统。- 返回值:
-
true
仅当操作成功时返回; 否则返回false
- 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对命名文件的写访问 - 自版本:
- 1.2
-
setWritable
public boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有人的写权限。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许修改禁止写操作的文件。Files
类定义了操作文件属性的方法,包括文件权限。在需要更精细地操作文件权限时可以使用此类。- 参数:
-
writable
- 如果为true
,则设置访问权限以允许写操作; 如果为false
,则禁止写操作 -
ownerOnly
- 如果为true
,则写权限仅适用于所有者的写权限; 否则,它适用于所有人。如果底层文件系统无法区分所有者的写权限和其他人的写权限,则权限将适用于所有人,而不考虑此值。 - 返回值:
-
true
仅当操作成功时返回。如果用户没有权限更改此抽象路径名的访问权限,则操作将失败。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对命名文件的写访问 - 自版本:
- 1.6
-
setWritable
public boolean setWritable(boolean writable) 设置此抽象路径名的所有者的写权限的便利方法。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许修改禁止写操作的文件。file.setWritable(arg)
形式调用此方法的行为与调用方式完全相同file.setWritable(arg, true)
- 参数:
-
writable
- 如果为true
,则设置访问权限以允许写操作; 如果为false
,则禁止写操作 - 返回值:
-
true
仅当操作成功时返回。如果用户没有权限更改此抽象路径名的访问权限,则操作将失败。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写访问 - 自版本:
- 1.6
-
setReadable
public boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有人的读权限。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许读取标记为不可读的文件。Files
类定义了操作文件属性的方法,包括文件权限。在需要更精细地操作文件权限时可以使用此类。- 参数:
-
readable
- 如果为true
,则设置访问权限以允许读操作; 如果为false
,则禁止读操作 -
ownerOnly
- 如果为true
,则读权限仅适用于所有者的读权限; 否则,它适用于所有人。如果底层文件系统无法区分所有者的读权限和其他人的读权限,则权限将适用于所有人,而不考虑此值。 - 返回值:
-
true
仅当操作成功时返回。如果用户没有权限更改此抽象路径名的访问权限,则操作将失败。如果readable
为false
且底层文件系统不实现读权限,则操作将失败。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写访问 - 自版本:
- 1.6
-
setReadable
public boolean setReadable(boolean readable) 设置此抽象路径名的所有者的读权限的便利方法。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许读取标记为不可读的文件。file.setReadable(arg)
形式调用此方法的行为与调用方式完全相同file.setReadable(arg, true)
- 参数:
-
readable
- 如果为true
,则设置访问权限以允许读操作; 如果为false
,则禁止读操作 - 返回值:
-
true
仅当操作成功时返回。如果用户没有权限更改此抽象路径名的访问权限,则操作将失败。如果readable
为false
且底层文件系统不实现读权限,则操作将失败。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写访问 - 自版本:
- 1.6
-
setExecutable
public boolean setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或所有人的执行权限。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许执行未标记为可执行的文件。Files
类定义了操作文件属性的方法,包括文件权限。在需要更精细地操作文件权限时可以使用此类。- 参数:
-
executable
- 如果为true
,则设置访问权限以允许执行操作; 如果为false
,则禁止执行操作 -
ownerOnly
- 如果为true
,则执行权限仅适用于所有者的执行权限; 否则,它适用于所有人。如果底层文件系统无法区分所有者的执行权限和其他人的执行权限,则权限将适用于所有人,而不考虑此值。 - 返回值:
-
true
仅当操作成功时返回。如果用户没有权限更改此抽象路径名的访问权限,则操作将失败。如果executable
为false
且底层文件系统不实现执行权限,则操作将失败。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写访问 - 自版本:
- 1.6
-
setExecutable
public boolean setExecutable(boolean executable) 设置此抽象路径名的所有者的执行权限的便利方法。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许执行未标记为可执行的文件。file.setExcutable(arg)
形式调用此方法的行为与调用方式完全相同file.setExecutable(arg, true)
- 参数:
-
executable
- 如果为true
,则设置访问权限以允许执行操作; 如果为false
,则禁止执行操作 - 返回值:
-
true
仅当操作成功时返回。如果用户没有权限更改此抽象路径名的访问权限,则操作将失败。如果executable
为false
且底层文件系统不实现执行权限,则操作将失败。 - 抛出:
-
SecurityException
- 如果存在安全管理器并且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对文件的写访问 - 自版本:
- 1.6
-
canExecute
public boolean canExecute()测试应用程序是否可以执行此抽象路径名表示的文件。在某些平台上,可能可以以特殊权限启动Java虚拟机,以允许执行未标记为可执行的文件。因此,即使文件没有执行权限,此方法可能返回true
。- Returns:
-
true
if and only if the abstract pathname exists and the application is allowed to execute the file - Throws:
-
SecurityException
- If a security manager exists and itsSecurityManager.checkExec(java.lang.String)
method denies execute access to the file - Since:
- 1.6
-
listRoots
List the available filesystem roots.A particular Java platform may support zero or more hierarchically-organized file systems. Each file system has a
root
directory from which all other files in that file system can be reached.This method returns an array of
File
objects that denote the root directories of the available filesystem roots. It is guaranteed that the canonical pathname of any file physically present on the local machine will begin with one of the roots returned by this method. There is no guarantee that a root directory can be accessed.Unlike most methods in this class, this method does not throw security exceptions. If a security manager exists and its
SecurityManager.checkRead(String)
method denies read access to a particular root directory, then that directory will not appear in the result.- Implementation Note:
-
Windows platforms, for example, have a root directory for each active drive; UNIX platforms have a single root directory, namely
"/"
. The set of filesystem roots is affected by various system-level operations such as the disconnecting or unmounting of physical or virtual disk drives.The canonical pathname of a file that resides on some other machine and is accessed via a remote-filesystem protocol such as SMB or NFS may or may not begin with one of the roots returned by this method. If the pathname of a remote file is syntactically indistinguishable from the pathname of a local file then it will begin with one of the roots returned by this method. Thus, for example,
File
objects denoting the root directories of the mapped network drives of a Windows platform will be returned by this method, whileFile
objects containing UNC pathnames will not be returned by this method. - Returns:
-
An array of
File
objects denoting the available filesystem roots, ornull
if the set of roots could not be determined. The array will be empty if there are no filesystem roots. - Since:
- 1.2
- See Also:
-
getTotalSpace
public long getTotalSpace()Returns the size of the partition named by this abstract pathname. If the total number of bytes in the partition is greater thanLong.MAX_VALUE
, thenLong.MAX_VALUE
will be returned.- Returns:
-
The size, in bytes, of the partition or
0L
if this abstract pathname does not name a partition or if the size cannot be obtained - Throws:
-
SecurityException
- If a security manager has been installed and it deniesRuntimePermission
("getFileSystemAttributes")
or itsSecurityManager.checkRead(String)
method denies read access to the file named by this abstract pathname - Since:
- 1.6
- See Also:
-
getFreeSpace
public long getFreeSpace()Returns the number of unallocated bytes in the partition named by this abstract path name. If the number of unallocated bytes in the partition is greater thanLong.MAX_VALUE
, thenLong.MAX_VALUE
will be returned.The returned number of unallocated bytes is a hint, but not a guarantee, that it is possible to use most or any of these bytes. The number of unallocated bytes is most likely to be accurate immediately after this call. It is likely to be made inaccurate by any external I/O operations including those made on the system outside of this virtual machine. This method makes no guarantee that write operations to this file system will succeed.
- Returns:
-
The number of unallocated bytes on the partition or
0L
if the abstract pathname does not name a partition or if this number cannot be obtained. This value will be less than or equal to the total file system size returned bygetTotalSpace()
. - Throws:
-
SecurityException
- If a security manager has been installed and it deniesRuntimePermission
("getFileSystemAttributes")
or itsSecurityManager.checkRead(String)
method denies read access to the file named by this abstract pathname - Since:
- 1.6
- See Also:
-
getUsableSpace
public long getUsableSpace()Returns the number of bytes available to this virtual machine on the partition named by this abstract pathname. If the number of available bytes in the partition is greater thanLong.MAX_VALUE
, thenLong.MAX_VALUE
will be returned. When possible, this method checks for write permissions and other operating system restrictions and will therefore usually provide a more accurate estimate of how much new data can actually be written thangetFreeSpace()
.The returned number of available bytes is a hint, but not a guarantee, that it is possible to use most or any of these bytes. The number of available bytes is most likely to be accurate immediately after this call. It is likely to be made inaccurate by any external I/O operations including those made on the system outside of this virtual machine. This method makes no guarantee that write operations to this file system will succeed.
- Returns:
-
The number of available bytes on the partition or
0L
if the abstract pathname does not name a partition or if this number cannot be obtained. On systems where this information is not available, this method will be equivalent to a call togetFreeSpace()
. - Throws:
-
SecurityException
- If a security manager has been installed and it deniesRuntimePermission
("getFileSystemAttributes")
or itsSecurityManager.checkRead(String)
method denies read access to the file named by this abstract pathname - Since:
- 1.6
- See Also:
-
createTempFile
Creates a new empty file in the specified directory, using the given prefix and suffix strings to generate its name. If this method returns successfully then it is guaranteed that:
- The file denoted by the returned abstract pathname did not exist before this method was invoked, and
- Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine.
deleteOnExit()
method.The
prefix
argument must be at least three characters long. It is recommended that the prefix be a short, meaningful string such as"hjb"
or"mail"
. Thesuffix
argument may benull
, in which case the suffix".tmp"
will be used.To create the new file, the prefix and the suffix may first be adjusted to fit the limitations of the underlying platform. If the prefix is too long then it will be truncated, but its first three characters will always be preserved. If the suffix is too long then it too will be truncated, but if it begins with a period character (
'.'
) then the period and the first three characters following it will always be preserved. Once these adjustments have been made the name of the new file will be generated by concatenating the prefix, five or more internally-generated characters, and the suffix.If the
directory
argument isnull
then the system-dependent default temporary-file directory will be used. The default temporary-file directory is specified by the system propertyjava.io.tmpdir
. On UNIX systems the default value of this property is typically"/tmp"
or"/var/tmp"
; on Microsoft Windows systems it is typically"C:\\WINNT\\TEMP"
. A different value may be given to this system property when the Java virtual machine is invoked, but programmatic changes to this property are not guaranteed to have any effect upon the temporary directory used by this method.If the
directory
argument is notnull
and its abstract pathname is valid and denotes an existing, writable directory, then the file will be created in that directory. Otherwise the file will not be created and anIOException
will be thrown. Under no circumstances will a directory be created at the location specified by thedirectory
argument.- 参数:
-
prefix
- 用于生成文件名的前缀字符串;必须至少三个字符长 -
suffix
- 用于生成文件名的后缀字符串;可以为null
,在这种情况下将使用后缀".tmp"
-
directory
- 要创建文件的目录,如果要使用默认临时文件目录,则为null
- 返回:
- 表示新创建的空文件的抽象路径名
- 抛出:
-
IllegalArgumentException
- 如果prefix
参数包含少于三个字符 -
IOException
- 如果无法创建文件 -
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法不允许创建文件 - 自版本:
- 1.2
-
createTempFile
在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。调用此方法等效于调用createTempFile(prefix, suffix, null)
。Files.createTempFile
方法提供了在临时文件目录中创建空文件的另一种方法。通过该方法创建的文件可能具有比此方法创建的文件更严格的访问权限,因此更适合于对安全性敏感的应用程序。- 参数:
-
prefix
- 用于生成文件名的前缀字符串;必须至少三个字符长 -
suffix
- 用于生成文件名的后缀字符串;可以为null
,在这种情况下将使用后缀".tmp"
- 返回:
- 表示新创建的空文件的抽象路径名
- 抛出:
-
IllegalArgumentException
- 如果prefix
参数包含少于三个字符 -
IOException
- 如果无法创建文件 -
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法不允许创建文件 - 自版本:
- 1.2
- 另请参阅:
-
compareTo
按字典顺序比较两个抽象路径名。此方法定义的排序取决于底层系统。在UNIX系统上,比较路径名时字母大小写是敏感的;在Microsoft Windows系统上则不敏感。- 指定者:
-
compareTo
在接口Comparable<File>
- 参数:
-
pathname
- 要与此抽象路径名进行比较的抽象路径名 - 返回:
- 如果参数等于此抽象路径名,则为零;如果此抽象路径名在字典顺序上小于参数,则为负值;如果此抽象路径名在字典顺序上大于参数,则为正值
- 自版本:
- 1.2
-
equals
测试此抽象路径名与给定对象是否相等。仅当参数不为null
且为与此抽象路径名相同的抽象路径名时,返回true
。两个抽象路径名是否相等取决于底层操作系统。在UNIX系统上,比较路径名时字母大小写是敏感的;在Microsoft Windows系统上则不敏感。 -
hashCode
public int hashCode()为此抽象路径名计算哈希码。因为抽象路径名的相等性取决于系统,所以它们的哈希码的计算也是系统相关的。在UNIX系统上,抽象路径名的哈希码等于其路径名字符串的哈希码与十进制值1234321
的异或。在Microsoft Windows系统上,哈希码等于其路径名字符串转换为小写后的哈希码与十进制值1234321
的异或。在将路径名字符串转换为小写时不考虑区域设置。 -
toString
返回此抽象路径名的路径名字符串。这只是由getPath()
方法返回的字符串。 -
toPath
返回从此抽象路径名构造的java.nio.file.Path
对象。生成的Path
与default-filesystem
关联。第一次调用此方法时,其作用就好像调用它等同于评估表达式:
FileSystems.getDefault().
getPath
(this.getPath());Path
。如果此抽象路径名为空抽象路径名,则此方法返回一个
Path
,可用于访问当前用户目录。- 返回:
-
从此抽象路径名构造的
Path
- 抛出:
-
InvalidPathException
- 如果无法从抽象路径构造Path
对象(请参阅FileSystem.getPath
) - 自版本:
- 1.7
- 另请参阅:
-