File类 - 概述

File 类的实例是文件或目录的路径名的抽象表示形式。Java虚拟机中的一个File实例表示一个路径名 。
比如,磁盘上 D:/malajava 目录名称为 阿凡达.mp4 的视频文件,它与JVM中File实例的关系如下图所示:
image.png

  • 一个File实例所表示的路径可能是个一个文件,也可能是一个目录。
  • 一个File实例所表示的路径名可能在磁盘上是存在的,也可能在磁盘上根本就不存在;

File类提供了用于操作文件或目录的方法,但并不支持访问文件的内容。

File类 - 用法

File类 常量

File 类提供了 4 个表示分隔符的常量:
image.png
不同的系统平台下,这四个常量的取值也不相同:

  • 在Windows 平台下
    • pathSeparator 和 pathSeparatorChar 对应的是 ;
    • separator 和 separatorChar 对应的是 \
  • Unix / Linux / OS X 平台下
    • pathSeparator 和 pathSeparatorChar 对应的是 :
    • separator 和 separatorChar 对应的是 /

separator 和 separatorChar 表示的是文件系统中路径的不同部分之间的分隔符;而 pathSeparator 和 pathSeparatorChar 则表示环境变量中 Path 变量值中不同部分的分隔符。

注意:在操作文件时一定要使用 File.separator 表示分隔符。在程序的开发中,往往会使用 Windows 开发环境,因为在 Windows 操作系统中支持的开发工具较多,使用方便,而在程序发布时往往是直接在 Linux 或其它操作系统上部署,所以这时如果不使用 File.separator,则程序运行就有可能存在问题。关于这一点我们在以后的开发中一定要有所警惕。

File类 构造方法

File 类提供了 4 个构造方法用于创建File实例:
image.png
举例:

  1. File first = new File( "D:/malajava/阿凡达.mp4" );
  2. System.out.println( first ); // D:/malajava/阿凡达.mp4
  3. File second = new File( "D:/malajava" , "阿凡达.mp4" );
  4. System.out.println( second ); // D:/malajava/阿凡达.mp4
  5. File third = new File( "D:/malajava" );
  6. System.out.println( third ); // D:/malajava
  7. File fourth = new File( third , "阿凡达.mp4" );
  8. System.out.println( fourth ); // D:/malajava/阿凡达.mp4


File类 文件属性

1)判断文件目录是否存在

public boolean exists();

2)判断是否为文件

public boolean isFile();

判断是否为目录

public boolean isDirectory();

3)判断是否为隐藏文件

public boolean isHidden();

4)判断是否为绝对路径

public boolean isAbsolute();

5)获取路径及名称

public String getName(); //获取最短的那个文件或者文件夹名称

public String getPath(); //获取相对路径,构造方法中传入的那个字符串

public String getAbsolutePath(); //获取绝对路径

public String getParent(); //获取父路径

6)获取访问时间
File类提供了获取文件或目录最后修改时间(以毫秒计)的方法:

public long lastModified();

7)获取文件长度
方法所返回的文件长度以字节为单位。如果File实例所表示的路径名是一个目录,则返回值是不确定的;如果File实例所表示的路径名在磁盘上是不存在,则返回 0L

public long length();

8)获取文件权限
文件或目录的权限

  • 读取权限
  • 修改权限 ( 也叫写权限 )
  • 执行权限 ```java public boolean canRead();

public boolean canWrite();

public boolean canExecute();

9)遍历文件夹下的目录或文件
```java
public String[]  list();//返回文件夹中的所有内容的名称(不包含子文件夹中的内容)
public File[]  listFiles(); //返回文件夹中的所有内容的File对象(不包含子文件夹中的内容)
注意事项:这两个方法只能针对文件夹使用,不能针对文件使用

获取文件夹下所有.java文件
java.io 包中提供了用于对文件或目录进行过滤的接口:

  • java.io.FilenameFilter
  • java.io.FileFilter

结合File类提供的方法可以实现对文件或目录的过滤:

public static void getAll(File file){
        //文件夹为空返回
        if(file== null){
             return ;
        }

        //过滤掉非.java文件。保留文件夹和.java文件
        File[] list=file.listFiles(new FileFilter(){
          @Override
          public boolean accept(File file) {
            if(file.isDirectory()){
                 return true;
            }

            if(file.getName().endsWith(".java")){
                return true;
            }
            return false;
        }});

        for(File f:list){
             if(f.isFile()){
                  System.out.println(f.getName());
             }else{
                getAll(f);
             }
        }
}

File类 创建/删除

1)创建目录
在已经存在的目录中创建单个子目录;使用该方法创建目录时,必须保证新目录的父目录是存在的,并且当前操作系统用户对该目录拥有写权限。

public boolean mkdir();

2)创建多级目录
当被创建目录的父目录不存在时,可以通过该方法来先创建父目录后再创建子目录。

public boolean mkdirs();

3)创建文件

public boolean createNewFile() throws IOException

4)文件重命名

  • File类型的参数表示新文件名称对应的路径
  • 当且仅当重命名成功时,返回 true ;否则返回 false
    public boolean renameTo( File destination );
    
    5)删除文件/目录
    public boolean delete();
    
    删除指定File实例所表示路径名对应的文件或目录;当且仅当成功删除文件或目录时,返回 true,否则返回 false。删除实例对象代表目录时,必须目录下为空才可以删除。
  • JVM终止时再删除指定File实例所表示路径对应的文件或目录
    public void deleteOnExit();