Module  java.base
软件包  java.io

Class File

  • All Implemented Interfaces:
    SerializableComparable<File>


    public class File
    extends Object
    implements Serializable, Comparable<File>
    文件和目录路径名的抽象表示。

    用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。 这个类提供了一个抽象的,独立于系统的层次化路径名的视图。 抽象路径名有两个组件:

    1. 可选的系统相关前缀字符串,例如用于UNIX根目录的磁盘驱动器说明符"/"或Microsoft Windows UNC路径名的"\\\" ,以及
    2. 零个或多个字符串名称的序列。
    抽象路径名中的第一个名称可能是目录名称,或者在Microsoft Windows UNC路径名的情况下是主机名。 抽象路径名中的每个后续名称表示一个目录; 姓氏可以表示目录或文件。 空的抽象路径名没有前缀和空名称序列。

    将路径名字符串转换为抽象路径名或从抽象路径名转换本质上是系统依赖的。 当抽象路径名被转换为路径名字符串时,每个名称与默认分隔符的单个副本与下一个名称分隔开。 默认的名称分隔符由系统属性file.separator定义,并在该类的公共静态字段separatorseparatorChar中可用。 当路径名字符串转换为抽象路径名时,其中的名称可能由默认名称分隔符或由底层系统支持的任何其他名称 - 分隔符分隔。

    无论是抽象还是字符串形式,路径名可以是绝对的相对的 绝对路径名是完整的,因为不需要其他信息来定位其表示的文件。 相对路径名必须根据从其他路径名获取的信息进行解释。 默认情况下, java.io包中的类始终根据当前用户目录解析相对路径名。 该目录由系统属性user.dir命名,通常是调用Java虚拟机的目录。

    抽象路径名的父级可以通过调用此类的getParent()方法获得,并由路径名的前缀和路径名的名称序列中的每个名称组成,除了最后一个。 每个目录的绝对路径名是任何File对象的祖先,绝对抽象路径名以目录的绝对路径名开头。 例如,由抽象路径名"/usr"表示的目录是由路径名"/usr/local/bin"表示的目录的祖先。

    前缀概念用于处理UNIX平台上的根目录,并在Microsoft Windows平台上驱动说明符,根目录和UNC路径名,如下所示:

    • 对于UNIX平台,绝对路径名的前缀始终为"/" 相对路径名没有前缀。 表示根目录的抽象路径名具有前缀"/"和空名称序列。
    • 对于Microsoft Windows平台,包含驱动器说明符的路径名的前缀包含驱动器":" ,后跟"\\"如果路径名为绝对,可能后跟"\\" UNC路径名的前缀为"\\\" ; 主机名和共享名称是名称序列中的前两个名称。 没有指定驱动器的相对路径名没有前缀。

    该类的实例可以表示或不表示实际的文件系统对象,例如文件或目录。 如果它表示这样一个对象,那么该对象驻留在一个分区中 分区是文件系统的特定于操作系统的存储部分。 单个存储设备(例如物理磁盘驱动器,闪存,CD-ROM)可能包含多个分区。 对象(如果有的话)将驻留在由此路径名的绝对形式的一些祖先的分区named上

    文件系统可以对实际的文件系统对象上的某些操作实施限制,例如读取,写入和执行。 这些限制统称为访问权限 文件系统对单个对象可以具有多组访问权限。 例如,一组可能适用于对象的所有者 ,另一组可能适用于所有其他用户。 对象的访问权限可能会导致此类中的某些方法失败。

    File类的实例是不可变的; 也就是说,一旦创建,由File对象表示的抽象路径名永远不会改变。

    互操作性与java.nio.file

    java.nio.file包定义了Java虚拟机访问文件,文件属性和文件系统的接口和类。 该API可能被用来克服java.io.File类的许多限制。 可以使用toPath方法来获得Path ,其使用由File对象表示的抽象路径来定位文件。 所产生的Path可能与Files类一起使用,以提供更高效和更广泛的访问附加文件操作,文件属性和I / O异常,以帮助在文件操作失败时诊断错误。

    从以下版本开始:
    1.0
    另请参见:
    Serialized Form
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      static String pathSeparator
      与系统相关的路径分隔符字符,为方便起见,表示为字符串。
      static char pathSeparatorChar
      与系统相关的路径分隔符。
      static String separator
      与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
      static char separatorChar
      与系统相关的默认名称分隔符。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      File​(File parent, String child)
      从父抽象路径名和子路径名字符串创建新的 File实例。
      File​(String pathname)
      通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
      File​(String parent, String child)
      从父路径名字符串和子路径名字符串创建新的 File实例。
      File​(URI uri)
      通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
    • 方法摘要

      所有方法  静态方法  接口方法  具体的方法  弃用的方法 
      Modifier and Type 方法 描述
      boolean canExecute​()
      测试应用程序是否可以执行此抽象路径名表示的文件。
      boolean canRead​()
      测试应用程序是否可以读取由此抽象路径名表示的文件。
      boolean canWrite​()
      测试应用程序是否可以修改由此抽象路径名表示的文件。
      int compareTo​(File pathname)
      比较两个抽象的路径名字典。
      boolean createNewFile​()
      当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
      static File createTempFile​(String prefix, String suffix)
      在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。
      static File createTempFile​(String prefix, String suffix, File directory)
      在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
      boolean delete​()
      删除由此抽象路径名表示的文件或目录。
      void deleteOnExit​()
      请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。
      boolean equals​(Object obj)
      测试此抽象路径名与给定对象的相等性。
      boolean exists​()
      测试此抽象路径名表示的文件或目录是否存在。
      File getAbsoluteFile​()
      返回此抽象路径名的绝对形式。
      String getAbsolutePath​()
      返回此抽象路径名的绝对路径名字符串。
      File getCanonicalFile​()
      返回此抽象路径名的规范形式。
      String getCanonicalPath​()
      返回此抽象路径名的规范路径名字符串。
      long getFreeSpace​()
      通过此抽象路径名返回分区 named中未分配字节的数量。
      String getName​()
      返回由此抽象路径名表示的文件或目录的名称。
      String getParent​()
      返回此抽象路径名的父目录的路径名字符串,如果此路径名未命名为父目录,则返回 null
      File getParentFile​()
      返回此抽象路径名的父目录的抽象路径名,如果此路径名不指定父目录,则返回 null
      String getPath​()
      将此抽象路径名转换为路径名字符串。
      long getTotalSpace​()
      通过此抽象路径名返回分区 named的大小。
      long getUsableSpace​()
      通过此抽象路径名返回分区 named上此虚拟机可用的字节数。
      int hashCode​()
      计算此抽象路径名的哈希码。
      boolean isAbsolute​()
      测试这个抽象路径名是否是绝对的。
      boolean isDirectory​()
      测试此抽象路径名表示的文件是否为目录。
      boolean isFile​()
      测试此抽象路径名表示的文件是否为普通文件。
      boolean isHidden​()
      测试此抽象路径名命名的文件是否为隐藏文件。
      long lastModified​()
      返回此抽象路径名表示的文件上次修改的时间。
      long length​()
      返回由此抽象路径名表示的文件的长度。
      String[] list​()
      返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
      String[] list​(FilenameFilter filter)
      返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
      File[] listFiles​()
      返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
      File[] listFiles​(FileFilter filter)
      返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
      File[] listFiles​(FilenameFilter filter)
      返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
      static File[] listRoots​()
      列出可用的文件系统根。
      boolean mkdir​()
      创建由此抽象路径名命名的目录。
      boolean mkdirs​()
      创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
      boolean renameTo​(File dest)
      重命名由此抽象路径名表示的文件。
      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 setReadOnly​()
      标记由此抽象路径名命名的文件或目录,以便只允许读取操作。
      boolean setWritable​(boolean writable)
      一种方便的方法来设置所有者对此抽象路径名的写入权限。
      boolean setWritable​(boolean writable, boolean ownerOnly)
      设置此抽象路径名的所有者或每个人的写入权限。
      Path toPath​()
      返回从此抽象路径构造的一个java.nio.file.Path对象。
      String toString​()
      返回此抽象路径名的路径名字符串。
      URI toURI​()
      构造一个表示此抽象路径名的 file: URI。
      URL toURL​()
      已过时。
      此方法不会自动转义URL中非法的字符。 建议在新的代码转换的抽象路径到URL通过先转换成URI,经由toURI方法,然后经由转换URI为URL URI.toURL方法。
    • 字段详细信息

      • separatorChar

        public static final char separatorChar
        与系统相关的默认名称分隔符。 该字段被初始化为包含系统属性值的第一个字符file.separator 在UNIX系统上,该字段的值为'/' ; 在Microsoft Windows系统上,它是'\\'
        另请参见:
        System.getProperty(java.lang.String)
      • separator

        public static final String separator
        与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。 该字符串包含单个字符,即separatorChar
      • pathSeparatorChar

        public static final char pathSeparatorChar
        与系统相关的路径分隔符。 该字段被初始化为包含系统属性值的第一个字符path.separator 此字符用于将路径列表中给出的文件序列中的文件名分隔。 在UNIX系统上,这个字符是':' ; 在Microsoft Windows系统上,它是';'
        另请参见:
        System.getProperty(java.lang.String)
      • pathSeparator

        public static final String pathSeparator
        与系统相关的路径分隔符字符,为方便起见,表示为字符串。 该字符串包含一个字符,即pathSeparatorChar
    • 构造方法详细信息

      • File

        public File​(String pathname)
        通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。 如果给定的字符串是空字符串,则结果是空的抽象路径名。
        参数
        pathname - 路径名字符串
        异常
        NullPointerException - 如果 pathname参数为 null
      • File

        public File​(String parent,
                    String child)
        从父路径名字符串和子路径名字符串创建新的File实例。

        如果parentnull则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数child

        否则,将使用parent路径名字符串表示目录,并将child路径名字符串用于表示目录或文件。 如果child路径名字符串是绝对的,那么它将以系统相关的方式转换为相对路径名。 如果parent是空字符串,则通过将child转换为抽象路径名并根据系统相关的默认目录解析结果来创建新的File实例。 否则,每个路径名字符串将转换为抽象路径名,并且子抽象路径名将针对父对象进行解析。

        参数
        parent - 父路径名字符串
        child - 子路径名字符串
        异常
        NullPointerException - 如果 childnull
      • File

        public File​(File parent,
                    String child)
        从父抽象路径名和子路径名字符串创建一个新的File实例。

        如果parentnull则创建新的File实例,就像在给定的child路径名字符串上调用单参数File构造函数child

        否则,采用parent抽象路径名来表示一个目录,并将child路径名字符串用于表示目录或文件。 如果child路径名字符串是绝对的,那么它将以系统相关的方式转换为相对路径名。 如果parent是空抽象路径名,则通过将child转换为抽象路径名并根据系统相关的默认目录解析结果来创建新的File实例。 否则,每个路径名字符串将转换为抽象路径名,并且子抽象路径名将针对父对象进行解析。

        参数
        parent - 父抽象路径名
        child - 子路径名字符串
        异常
        NullPointerException - 如果 childnull
      • File

        public File​(URI uri)
        通过将给定的file: URI转换为抽象路径名来创建新的File实例。

        file: URI的确切形式是系统依赖的,因此此构造函数执行的转换也依赖于系统。

        对于给定的抽象路径名f,它是保证的

        new File(  f .toURI()).equals(  f .getAbsoluteFile())
        只要原始的抽象路径名,URI和新的抽象路径名都在同一个Java虚拟机(可能不同的调用)中创建。 但是,当在一个操作系统上的虚拟机中创建的file: URI在不同的操作系统上的虚拟机中转换为抽象路径名时,这种关系通常不成立。
        参数
        uri - 具有等于 "file"的方案的绝对分层URI,非空路径组件,以及未定义的权限,查询和片段组件
        异常
        NullPointerException - 如果 urinull
        IllegalArgumentException - 如果参数的前提条件不成立
        从以下版本开始:
        1.4
        另请参见:
        toURI()URI
    • 方法详细信息

      • getName

        public String getName​()
        返回由此抽象路径名表示的文件或目录的名称。 这只是路径名称序列中的最后一个名字。 如果路径名的名称序列为空,则返回空字符串。
        结果
        由此抽象路径名表示的文件或目录的名称,如果此路径名的名称序列为空,则为空字符串
      • getParent

        public String getParent​()
        返回此抽象路径名的父目录的路径名字符串,如果此路径名未命名为父目录,则返回null

        抽象路径名的项由路径名的前缀(如果有)和路径名的名称序列中的每个名称组成,除了最后一个。 如果名称序列为空,则路径名不会指定父目录。

        结果
        由此抽象路径名命名的父目录的路径名字符串,或 null如果此路径名未命名为父
      • getParentFile

        public File getParentFile​()
        返回此抽象路径名的父目录的抽象路径名,如果此路径名未命名为父目录,则返回null

        抽象路径名的项由路径名的前缀(如果有)和路径名的名称序列中的每个名称组成,除了最后一个。 如果名称序列为空,则路径名不会指定父目录。

        结果
        由此抽象路径名命名的父目录的抽象路径名,如果此路径名未命名为父类, null
        从以下版本开始:
        1.2
      • getPath

        public String getPath​()
        将此抽象路径名转换为路径名字符串。 生成的字符串使用default name-separator character以名称顺序分隔名称。
        结果
        这个抽象路径名的字符串形式
      • isAbsolute

        public boolean isAbsolute​()
        测试这个抽象路径名是否是绝对的。 绝对路径名的定义是依赖于系统的。 在UNIX系统上,如果前缀为"/" ,路径名是绝对的。 在Microsoft Windows系统上,路径名是绝对的,如果其前缀是驱动器说明符,后跟"\\" ,或者前缀为"\\\"
        结果
        true如果这个抽象路径名是绝对的, false否则
      • getAbsolutePath

        public String getAbsolutePath​()
        返回此抽象路径名的绝对路径名字符串。

        如果这个抽象路径名已经是绝对的,那么路径名字符串就像getPath()方法一样简单地返回。 如果此抽象路径名为空抽象路径名,则返回由系统属性user.dir命名的当前用户目录的路径名字符串。 否则,该路径名以系统相关的方式解决。 在UNIX系统上,通过将相对路径名解析为当前用户目录,使其成为绝对路径。 在Microsoft Windows系统上,相对路径名是绝对的,通过将其与由路径名命名的驱动器的当前目录(如果有的话)解决; 如果没有,则针对当前用户目录进行解析。

        结果
        绝对路径名字符串表示与此抽象路径名相同的文件或目录
        异常
        SecurityException - 如果无法访问所需的系统属性值。
        另请参见:
        isAbsolute()
      • getAbsoluteFile

        public File getAbsoluteFile​()
        返回此抽象路径名的绝对形式。 相当于new File(this.getAbsolutePath())
        结果
        绝对的抽象路径名表示与该抽象路径名相同的文件或目录
        异常
        SecurityException - 如果无法访问所需的系统属性值。
        从以下版本开始:
        1.2
      • getCanonicalPath

        public String getCanonicalPath​()
                                throws IOException
        返回此抽象路径名的规范路径名字符串。

        规范的路径名是绝对的和唯一的。 规范形式的精确定义是系统依赖的。 如果需要,该方法首先将此路径名转换为绝对形式,就像调用getAbsolutePath()方法一样,然后以系统相关的方式将其映射到其唯一形式。 这通常包括从路径名中删除冗余名称,例如"."".." ,解析符号链接(在UNIX平台上),并将驱动器号转换为标准情况(在Microsoft Windows平台上)。

        表示现有文件或目录的每个路径名都具有唯一的规范形式。 表示不存在的文件或目录的每个路径名也具有唯一的规范形式。 不存在的文件或目录的路径名的规范形式可能与创建文件或目录后的相同路径名的规范形式不同。 类似地,现有文件或目录的路径名的规范形式可能与删除文件或目录后的相同路径名的规范形式不同。

        结果
        规范的路径名字符串表示与该抽象路径名相同的文件或目录
        异常
        IOException - 如果发生I / O错误,这是可能的,因为规范路径名的构造可能需要文件系统查询
        SecurityException - 如果无法访问所需的系统属性值,或者存在安全管理员,并且其 SecurityManager.checkRead(java.io.FileDescriptor)方法拒绝对文件的读取访问
        从以下版本开始:
        1.1
        另请参见:
        Path.toRealPath(java.nio.file.LinkOption...)
      • toURL

        @Deprecated
        public URL toURL​()
                  throws MalformedURLException
        已过时。 此方法不会自动转义URL中非法的字符。 建议在新的代码转换的抽象路径到URL通过先转换成URI,经由toURI方法,然后经由转换URI为URL URI.toURL方法。
        将此抽象路径名转换为file:网址。 URL的确切形式依赖于系统。 如果可以确定由此抽象路径名表示的文件是目录,则生成的URL将以斜杠结尾。
        结果
        表示等效文件URL的URL对象
        异常
        MalformedURLException - 如果路径无法解析为URL
        从以下版本开始:
        1.2
        另请参见:
        toURI()URIURI.toURL()URL
      • toURI

        public URI toURI​()
        构造一个表示此抽象路径名的file: URI。

        URI的确切形式是依赖于系统的。 如果可以确定由此抽象路径名表示的文件是目录,则生成的URI将以斜杠结尾。

        对于给定的抽象路径名f ,它是有保证的

        new File(  f .toURI()).equals(  f .getAbsoluteFile())
        只要原始的抽象路径名,URI和新的抽象路径名都在同一个Java虚拟机(可能不同的调用)中创建。 然而,由于抽象路径名的系统依赖性质,当在一个操作系统上的虚拟机中创建的一个file: URI被转换为不同操作系统上的虚拟机中的抽象路径名时,这种关系通常不成立。

        请注意,当此抽象路径名表示UNC路径名时,UNC的所有组件(包括服务器名称组件)都将编码在URI路径中。 权限组件未定义,表示为null Path类定义了toUri方法对所生成的URI的权限组件中的服务器名进行编码。 toPath方法可用于获取表示此抽象路径名的Path

        结果
        绝对的分层URI,方案等于 "file" ,表示此抽象路径名的路径,以及未定义的权限,查询和片段组件
        异常
        SecurityException - 如果无法访问所需的系统属性值。
        从以下版本开始:
        1.4
        另请参见:
        File(java.net.URI)URIURI.toURL()
      • 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)方法拒绝对文件的读取访问
        从以下版本开始:
        1.2
      • lastModified

        public long lastModified​()
        返回此抽象路径名表示的文件上次修改的时间。
        API Note:
        虽然返回值的时间单位为毫秒,但该值的粒度取决于底层文件系统,并且可能较大。 例如,某些文件系统以秒为单位使用时间戳。

        在需要区分I / O异常和返回0L的情况下,或同时需要同一文件的几个属性或需要最后访问时间或创建时间的情况下,可以使用Files.readAttributes方法。 然而,如果仅需要上次修改的时间,则可以使用Files.getLastModifiedTime方法。

        结果
        long表示时间的文件的最后修改值,在从epoch(00:00:00 GMT 1月1日,1970),或毫秒时测量0L ,如果文件不存在,或者如果发生I / O错误。 值可以是负数,表示时期之前的毫秒数
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对文件的读取访问
      • length

        public long length​()
        返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。

        在需要区分I / O异常与返回0L的情况或同时需要同一文件的几个属性的情况下,可以使用Files.readAttributes方法。

        结果
        由此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在, 0L 某些操作系统可能会返回0L用于表示系统依赖实体(如设备或管道)的路径名。
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对文件的读取访问
      • createNewFile

        public boolean createNewFile​()
                              throws IOException
        当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 检查文件的存在和文件的创建(如果不存在)是对可能影响文件的所有其他文件系统活动是单一的操作。

        注意:此方法应用于文件锁定,因为生成的协议不能使其可靠地工作。 应该使用FileLock设施。

        结果
        true如果命名文件不存在并被成功创建; false如果命名文件已经存在
        异常
        IOException - 如果发生I / O错误
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkWrite(java.lang.String)方法拒绝对该文件的写入访问
        从以下版本开始:
        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)方法拒绝对该文件的删除访问
        从以下版本开始:
        1.2
        另请参见:
        delete()
      • list

        public String[] list​()
        返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。

        如果此抽象路径名不表示目录,则此方法返回null 否则返回一个字符串数组,一个用于目录中的每个文件或目录。 表示目录本身和目录的父目录的名称不包括在结果中。 每个字符串都是一个文件名,而不是完整的路径。

        不保证结果数组中的名称字符串将以任何特定的顺序出现; 他们不是特别保证按字母顺序出现。

        请注意, Files类定义了打开目录的newDirectoryStream方法,并遍历目录中文件的名称。 在使用非常大的目录时,这可能会减少资源,并且在使用远程目录时可能会更加灵活。

        结果
        一组字符串,命名由此抽象路径名表示的目录中的文件和目录。 如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回null
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
      • list

        public String[] list​(FilenameFilter filter)
        返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 该方法的行为与list()方法的行为相同,只是返回的数组中的字符串必须满足过滤器。 如果给出的filternull那么所有的名字都被接受。 否则,当且仅当值true在该抽象路径名上调用过滤器的FilenameFilter.accept(File, String)方法以及其所指示的目录中的文件或目录的名称时,该名称满足过滤器。
        参数
        filter - 文件名过滤器
        结果
        一组字符串,命名由该抽象路径名表示的目录中由给定的filter接受的文件和目录。 如果目录为空,或者过滤器没有接受名称,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回null
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
        另请参见:
        Files.newDirectoryStream(Path,String)
      • listFiles

        public File[] listFiles​()
        返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。

        如果此抽象路径名不表示目录,则此方法返回null 否则返回一个File对象的数组,一个对应目录中的每个文件或目录。 表示目录本身和目录的父目录的路径名不包括在结果中。 每个生成的抽象路径名由使用File(File, String)构造函数的抽象路径名构造。 因此,如果这个路径名是绝对的,那么每个生成的路径名是绝对的; 如果此路径名是相对的,那么每个生成的路径名将相对于相同的目录。

        不保证结果数组中的名称字符串将以任何特定的顺序出现; 他们不是特别保证按字母顺序出现。

        请注意, Files类定义了打开目录的newDirectoryStream方法,并遍历目录中文件的名称。 当使用非常大的目录时,这可能会减少资源。

        结果
        一组抽象路径名,表示由此抽象路径名表示的目录中的文件和目录。 如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回null
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
        从以下版本开始:
        1.2
      • listFiles

        public File[] listFiles​(FilenameFilter filter)
        返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 此方法的行为与listFiles()方法的行为相同,但返回的数组中的路径名必须满足过滤器。 如果给定的filternull那么所有的路径名都被接受。 否则,如果且仅当值为true的过滤器的FilenameFilter.accept(File, String)方法在此抽象路径名上被调用时,路径名满足过滤器,并且在其所指示的目录中调用文件或目录的名称。
        参数
        filter - 文件名过滤器
        结果
        一组抽象路径名,表示由此抽象路径名表示的目录中的文件和目录。 如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或返回I / O错误,则返回null
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
        从以下版本开始:
        1.2
        另请参见:
        Files.newDirectoryStream(Path,String)
      • listFiles

        public File[] listFiles​(FileFilter filter)
        返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 该方法的行为与listFiles()方法的行为相同,只是返回的数组中的路径名必须满足该过滤器。 如果给定的filternull那么所有的路径名都被接受。 否则,当且仅当在路径名trueFileFilter.accept(File)方法时导致值为true时,路径名满足过滤器。
        参数
        filter - 文件过滤器
        结果
        一组抽象路径名,表示由此抽象路径名表示的目录中的文件和目录。 如果目录为空,则该数组将为空。 如果此抽象路径名不表示目录,或者发生I / O错误,则返回null
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(String)方法拒绝对目录的读取访问
        从以下版本开始:
        1.2
        另请参见:
        Files.newDirectoryStream(Path,java.nio.file.DirectoryStream.Filter)
      • mkdirs

        public boolean mkdirs​()
        创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 请注意,如果此操作失败,它可能已成功创建一些必需的父目录。
        结果
        true当且仅当创建目录以及所有必需的父目录时; 否则为false
        异常
        SecurityException - 如果安全管理器存在,并且其SecurityManager.checkRead(java.lang.String)方法不允许验证命名目录和所有必需的父目录的存在; 或者如果SecurityManager.checkWrite(java.lang.String)方法不允许创建命名目录和所有必需的父目录
      • renameTo

        public boolean renameTo​(File dest)
        重命名由此抽象路径名表示的文件。

        该方法的行为的许多方面固有地依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件可能无法成功已经存在。 应始终检查返回值,以确保重命名操作成功。

        请注意, Files类定义了以独立于平台的方式移动或重命名文件的move方法。

        参数
        dest - 命名文件的新抽象路径名
        结果
        true当且仅当重命名成功; false否则
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkWrite(java.lang.String)方法拒绝对旧的或新的路径名的写入权限
        NullPointerException - 如果参数 destnull
      • 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当且仅当操作成功。 如果用户没有权限更改此抽象路径名的访问权限,操作将失败。 如果readablefalse ,底层文件系统未实现读取权限,则操作将失败。
        异常
        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当且仅当操作成功。 如果用户没有权限更改此抽象路径名的访问权限,操作将失败。 如果readablefalse ,底层文件系统未实现读取权限,则操作将失败。
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkWrite(java.lang.String)方法拒绝对文件的写入访问
        从以下版本开始:
        1.6
      • setExecutable

        public boolean setExecutable​(boolean executable,
                                     boolean ownerOnly)
        设置该抽象路径名的所有者或每个人的执行权限。 在某些平台上,可能会启动具有特殊权限的Java虚拟机,以允许其执行未标记为可执行文件。

        Files类定义了对文件属性(包括文件权限)进行操作的方法。 当需要更精细的文件权限操作时,可以使用这种方法。

        参数
        executable - 如果是true ,则设置允许执行操作的访问权限; 如果false禁止执行操作
        ownerOnly - 如果是true ,则执行权限仅适用于所有者的执行权限; 否则适用于所有人。 如果底层文件系统无法区分所有者的执行权限与其他人的执行权限,则该权限将适用于所有人,不管该值。
        结果
        true当且仅当操作成功。 如果用户没有权限更改此抽象路径名的访问权限,操作将失败。 如果executablefalse ,底层文件系统未实现执行权限,则操作将失败。
        异常
        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当且仅当操作成功。 如果用户没有权限更改此抽象路径名的访问权限,操作将失败。 如果executablefalse ,底层文件系统未实现执行权限,则操作将失败。
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkWrite(java.lang.String)方法拒绝对文件的写入访问
        从以下版本开始:
        1.6
      • canExecute

        public boolean canExecute​()
        测试应用程序是否可以执行此抽象路径名表示的文件。 在某些平台上,可能会启动具有特殊权限的Java虚拟机,以允许其执行未标记为可执行文件。 因此,即使该文件没有执行权限,该方法也可能返回true
        结果
        true当且仅当存在抽象路径名 允许应用程序执行文件时
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkExec(java.lang.String)方法拒绝执行对该文件的访问
        从以下版本开始:
        1.6
      • listRoots

        public static File[] listRoots​()
        列出可用的文件系统根。

        一个特定的Java平台可以支持零个或多个分层组织的文件系统。 每个文件系统都有一个root目录,从该目录可以访问该文件系统中的所有其他文件。 例如,Windows平台具有每个活动驱动器的根目录; UNIX平台有一个根目录,即"/" 可用文件系统根的集合受到各种系统级操作的影响,例如插入或弹出可移动介质以及断开或卸载物理或虚拟磁盘驱动器。

        此方法返回一个File对象的数组,它们表示可用文件系统根的根目录。 确保本地机器上物理存在的任何文件的规范路径名将以此方法返回的其中一个根源开始。

        驻留在某个其他机器上并通过远程文件系统协议(如SMB或NFS)访问的文件的规范路径名可能或可能不以此方法返回的根目录之一开始。 如果远程文件的路径名在语法上与本地文件的路径名无法区分,那么它将以此方法返回的其中一个根开始。 因此,例如, File对象表示在Windows平台的映射的网络驱动器的根目录下将通过该方法返回,而File含有UNC路径名的对象将不通过该方法来返回。

        与此类中的大多数方法不同,此方法不会抛出安全异常。 如果安全管理器存在,并且其SecurityManager.checkRead(String)方法拒绝对特定根目录的读取访问,则该目录将不会显示在结果中。

        结果
        一组File对象表示可用的文件系统根,或null如果无法确定根组。 如果没有文件系统根,数组将为空。
        从以下版本开始:
        1.2
        另请参见:
        FileStore
      • getTotalSpace

        public long getTotalSpace​()
        通过此抽象路径名返回分区 named的大小。
        结果
        分区的大小(以字节为单位),如果此抽象路径名不指定分区, 0L
        异常
        SecurityException - 如果已安装安全管理器,并且它拒绝RuntimePermission ("getFileSystemAttributes")或其SecurityManager.checkRead(String)方法拒绝对此抽象路径名命名的文件的读访问权限
        从以下版本开始:
        1.6
      • getFreeSpace

        public long getFreeSpace​()
        通过此抽象路径名返回分区named中未分配字节的数量。

        返回的未分配字节数是一个提示,但不是保证,可以使用大多数或任何这些字节。 在此呼叫之后,未分配字节的数量很可能是准确的。 任何外部I / O操作(包括在该虚拟机之外的系统上进行的操作)都可能导致不准确。 此方法不保证对该文件系统的写入操作将成功。

        结果
        分区上的未分配字节数或0L如果抽象路径名未命名分区。 该值将小于或等于由getTotalSpace()返回的总文件系统大小。
        异常
        SecurityException - 如果已安装安全管理器,并且它拒绝RuntimePermission ("getFileSystemAttributes")或其SecurityManager.checkRead(String)方法拒绝对此抽象路径名命名的文件的读访问权限
        从以下版本开始:
        1.6
      • getUsableSpace

        public long getUsableSpace​()
        通过此抽象路径名返回分区named上此虚拟机可用的字节数。 在可能的情况下,此方法会检查写入权限和其他操作系统限制,因此通常可以提供比getFreeSpace()更实际的写入数据的准确估计。

        返回的可用字节数是一个提示,但不是保证,可以使用大多数或任何这些字节。 在此呼叫之后,未分配字节的数量很可能是准确的。 任何外部I / O操作(包括在该虚拟机之外的系统上进行的操作)都可能导致不准确。 此方法不保证对该文件系统的写入操作将成功。

        结果
        分区上的可用字节数或0L如果抽象路径名未命名分区。 在此信息不可用的系统上,此方法将等同于对getFreeSpace()的调用。
        异常
        SecurityException - 如果已安装安全管理员,并且它拒绝RuntimePermission ("getFileSystemAttributes")或其SecurityManager.checkRead(String)方法拒绝对此抽象路径名命名的文件的读访问权限
        从以下版本开始:
        1.6
      • createTempFile

        public static File createTempFile​(String prefix,
                                          String suffix,
                                          File directory)
                                   throws IOException

        在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 如果此方法成功返回,则可以保证:

        1. 在调用此方法之前,由返回的抽象路径名表示的文件不存在
        2. 该方法和其任何变体都不会在当前虚拟机的调用中再次返回相同的抽象路径名。
        此方法仅提供临时文件设施的一部分。 要安排通过此方法创建的文件被自动删除,请使用deleteOnExit()方法。

        prefix参数必须至少有三个字符长。 建议前缀为短的有意义的字符串,如"hjb""mail" suffix参数可以是null ,在这种情况下将使用后缀".tmp"

        要创建新文件,可以首先调整前缀和后缀以适应底层平台的限制。 如果前缀太长,那么它将被截断,但它的前三个字符将始终保留。 如果后缀太长,那么它也将被截断,但是如果以句点字符( '.' )开头,那么它的周期和前三个字符将始终保留。 一旦进行了这些调整,将通过连接前缀,五个或更多内部生成的字符和后缀来生成新文件的名称。

        如果directory参数为null则系统依赖的默认临时文件目录将被使用。 默认的临时文件目录由系统属性java.io.tmpdir指定。 在UNIX系统上,此属性的默认值通常为"/tmp""/var/tmp" ; 在Microsoft Windows系统上通常是"C:\\WINNT\\TEMP" 当Java虚拟机被调用时,可以向该系统属性赋予不同的值,但是不能保证对此属性的编程更改对此方法使用的临时目录有任何影响。

        参数
        prefix - 用于生成文件名的前缀字符串; 长度必须至少为3个字符
        suffix - 用于生成文件名称的后缀字符串; 可能是null ,在这种情况下将使用后缀".tmp"
        directory - 要创建文件的目录,如果要使用默认的临时文件目录, null
        结果
        表示新创建的空文件的抽象路径名
        异常
        IllegalArgumentException - 如果 prefix参数包含少于三个字符
        IOException - 如果无法创建文件
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkWrite(java.lang.String)方法不允许创建文件
        从以下版本开始:
        1.2
      • compareTo

        public int compareTo​(File pathname)
        比较两个抽象的路径名字典。 该方法定义的顺序取决于底层系统。 在UNIX系统上,字母大小写在比较路径名中是重要的; 在Microsoft Windows系统上它不是。
        Specified by:
        compareTo在接口 Comparable<File>
        参数
        pathname - 要与此抽象路径名进行比较的抽象路径名
        结果
        如果参数等于此抽象路径名,则为零,如果此抽象路径名在字典上小于参数,则小于零的值,或者如果此抽象路径名在词法上大于参数,则该值大于零
        从以下版本开始:
        1.2
      • equals

        public boolean equals​(Object obj)
        测试此抽象路径名与给定对象的相等性。 返回true当且仅当参数不是null并且是一个抽象路径名,表示与此抽象路径名相同的文件或目录。 两个抽象的路径名是否相等取决于底层系统。 在UNIX系统上,字母大小写在比较路径名中是重要的; 在Microsoft Windows系统上它不是。
        重写:
        equalsObject
        参数
        obj - 要与此抽象路径名进行比较的对象
        结果
        true当且仅当对象相同时; 否则为false
        另请参见:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode​()
        计算此抽象路径名的哈希码。 因为抽象路径名的相等性固有地依赖于系统,所以它们的哈希码的计算也是如此。 在UNIX系统上,抽象路径名的哈希码等于其路径名字符串和十进制值1234321的排他哈希码。 在Microsoft Windows系统上,哈希码等于其转换为小写字母的路径名字符串的排他哈希码,并且小数值为1234321 缩小路径名字符串时不考虑区域设置。
        重写:
        hashCodeObject
        结果
        此抽象路径名的哈希码
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • toString

        public String toString​()
        返回此抽象路径名的路径名字符串。 这只是getPath()方法返回的字符串。
        重写:
        toStringObject
        结果
        这个抽象路径名的字符串形式
      • toPath

        public Path toPath​()
        返回从该抽象路径构造的一个java.nio.file.Path对象。 结果Pathdefault-filesystem相关联。

        该方法的第一次调用的工作原理就像调用它相当于评估表达式:

         FileSystems.getDefault().getPath(this.getPath());
         
        此方法的后续调用返回相同的Path

        如果此抽象路径名为空抽象路径名,则此方法返回可用于访问当前用户目录的Path

        结果
        一个从这个抽象路径构建的 Path
        异常
        InvalidPathException - 如果一个 Path对象不能从抽象路径构造(见 FileSystem.getPath
        从以下版本开始:
        1.7
        另请参见:
        Path.toFile()