01 File概述、API


一、File类概述

● File类在包java.io.File下、代表操作系统的文件对象(文件、文件夹)。

● File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能。

File类创建对象

方法名称 说明
public File (String pathname) 根据文件路径创建文件对象
public File (String parent, String child) 从父路径名字符串和子路径名字符串创建文件对象
public File (File parent, String child) 根据父路径对应文件对象和子路径名字符串创建文件对象

● File对象可以定位文件和文件夹

● File封装的对象仅仅是一个路径名,这个路径可以是存在的

绝对路径和相对路径

绝对路径:从盘符开始

File file1 = new File(“D:\\itheima\\a.txt”);

相对路径:不带盘符,默认直接到当前工程下的目录寻找文件

File file3 = new File(“模块名\\a.txt”);

【代码示例】

//目标:学会创建File对象定位操作系统的文件(文件 文件夹的)
public class Fileemo {
    public static void main(String[] args) {
        // 1、创建File对象(指定了文件的路径)
        // 路径写法: D:\resources\xueshan.jpeg
        //          D:/resources/xueshan.jpeg
        //          File.separator
//        File f = new File("D:\\resources\\xueshan.jpeg");
//        File f = new File("D:/resources/xueshan.jpeg");
        File f = new File("D:" + File.separator+"resources"+ File.separator +"xueshan.jpeg");
        long size = f.length(); // 是文件的字节大小
        System.out.println(size);

        // 2、File创建对象,支持绝对路径 支持相对路径(重点)
        File f1 = new File("D:\\resources\\beauty.jpeg"); // 绝对路径
        System.out.println(f1.length());

        // 相对路径:一般定位模块中的文件的。 相对到工程下!!
        File f2 = new File("file-io-app/src/data.txt");
        System.out.println(f2.length());

        // 3、File创建对象 ,可以是文件也可以是文件夹
        File f3 = new File("D:\\resources");
        System.out.println(f3.exists()); // 判断这个路径是否存在,这个文件夹存在否
    }
}

运行结果:

38490
46824
6
true

二、FIle类的常见API

1.判断文件类型、获取文件信息

 File类的判断文件类型、 获取文件信息功能 

方法名称 说明
public boolean isDirectory( ) 测试此抽象路径名表示的File是否为文件夹
public boolean isFile( ) 测试此抽象路径名表示的File是否为文件
public boolean exists( ) 测试此抽象路径名表示的File是否存在
public String getAbsolutePath( ) 返回此抽象路径名的绝对路径名字符串
public String getPath( ) 将此抽象路径名转换为路径名字符串
public String getName( ) 返回由此抽象路径名表示的文件或文件夹的名称
public long lastModified( ) 返回文件最后修改的时间毫秒值

 【代码示例】绝对路径 相对路径

public class FileDemo02 {
    public static void main(String[] args) {
        // 1.绝对路径创建一个文件对象
        File f1 = new File("D:/resources/xueshan.jpeg");
        // a.获取它的绝对路径。
        System.out.println(f1.getAbsolutePath());
        // b.获取文件定义的时候使用的路径。
        System.out.println(f1.getPath());
        // c.获取文件的名称:带后缀。
        System.out.println(f1.getName());
        // d.获取文件的大小:字节个数。
        System.out.println(f1.length()); // 字节大小
        // e.获取文件的最后修改时间
        long time = f1.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
        // f、判断文件是文件还是文件夹
        System.out.println(f1.isFile()); // true
        System.out.println(f1.isDirectory()); // false

        System.out.println("-------------------------");

        File f2 = new File("file-io-app\\src\\data.txt");
        // a.获取它的绝对路径。
        System.out.println(f2.getAbsolutePath());
        // b.获取文件定义的时候使用的路径。
        System.out.println(f2.getPath());
        // c.获取文件的名称:带后缀。
        System.out.println(f2.getName());
        // d.获取文件的大小:字节个数。
        System.out.println(f2.length()); // 字节大小
        // e.获取文件的最后修改时间
        long time1 = f2.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
        // f、判断文件是文件还是文件夹
        System.out.println(f2.isFile()); // true
        System.out.println(f2.isDirectory()); // false
        System.out.println(f2.exists()); // true

        File file = new File("D:/");
        System.out.println(file.isFile()); // false
        System.out.println(file.isDirectory()); // true
        System.out.println(file.exists()); // true

        File file1 = new File("D:/aaa");
        System.out.println(file1.isFile()); // false
        System.out.println(file1.isDirectory()); // false
        System.out.println(file1.exists()); // false

    }
}

 运行结果:

D:\resources\xueshan.jpeg
D:\resources\xueshan.jpeg
xueshan.jpeg
38490
最后修改时间:2021/12/01 20:42:52
true
false
-------------------------
D:\develop\Code\基础语法\file-io-app\src\data.txt
file-io-app\src\data.txt
data.txt
6
最后修改时间:1970/01/01 08:00:00
true
false
true
false
true
true
false
false
false

2.创建文件删除文件功能

File类创建文件的功能

方法名称 说明
public boolean createNewFile( ) 创建一个新的空的文件
public boolean mkdir( ) 只能创建一级文件夹
public boolean mkdirs( ) 可以创建多级文件夹

File类删除文件的功能

方法名称 说明
public boolean delete?() 删除由此抽象路径名表示的文件或空文件夹

delete方法默认只能删除文件和空文件夹。

delete方法直接删除不走回收站 。(占用时,也可以删除)

【代码示例】

public class FileDemo03 {
    public static void main(String[] args) throws IOException {
        File f = new File("file-io-app\\src\\data.txt");
        // a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
        System.out.println(f.createNewFile());
        File f1 = new File("file-io-app\\src\\data02.txt");
        System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)

        // b.mkdir创建一级目录
        File f2 = new File("D:/resources/aaa");
        System.out.println(f2.mkdir());

        // c.mkdirs创建多级目录(重点)
        File f3 = new File("D:/resources/ccc/ddd/eee/ffff");
//        System.out.println(f3.mkdir());
        System.out.println(f3.mkdirs()); // 支持多级创建

        // d.删除文件或者空文件夹
        System.out.println(f1.delete());
        File f4 = new File("D:/resources/xueshan.jpeg");
        System.out.println(f4.delete()); // 占用一样可以删除

        // 只能删除空文件夹,不能删除非空文件夹.
        File f5 = new File("D:/resources/aaa");
        System.out.println(f5.delete());
    }
}

3.遍历文件夹

File类的遍历功能

方法名称 说明
public String[ ] list( ) 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[ ] listFiles( )(常用) 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回( 重点)

ListFiles方法注意事项:

当调用者不存在时,返回null

当调用者是一个文件时,返回null

当调用者是一个空文件时,返回一个长度为0的数组

当调用者是一个有非空文件夹时,将里面所有文件文件夹路径放在File数组中返回

当调用者是一个有隐藏文件的文件夹时,将里面所有文件文件夹路径放在File数组中返回,包含隐藏内容

当调用者时一个需要权限才能进入的文件夹时,返回null

【代码示例】

文件夹图样:

/**
    目标:File针对目录的遍历
    - public String[] list():
         获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
    - public File[] listFiles()(常用):
         获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
 */
public class FileDemo04 {
    public static void main(String[] args) {
        // 1、定位一个目录
        File f1 = new File("D:/resources");
        String[] names = f1.list();
        for (String name : names) {
            System.out.println(name);
        }

        // 2.一级文件对象
        // 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
        File[] files = f1.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }

        // 注意事项
        File dir = new File("D:/resources/ddd");
        File[] files1 = dir.listFiles();
        System.out.println(Arrays.toString(files1));
    }
}

运行结果:

aaa
bbb
beauty.jpeg
caoyuan.jpeg
data.txt
xingkong.jpeg
xueshan.jpeg
yezi.jpeg
---------------------
D:\resources\aaa
D:\resources\bbb
D:\resources\beauty.jpeg
D:\resources\caoyuan.jpeg
D:\resources\data.txt
D:\resources\xingkong.jpeg
D:\resources\xueshan.jpeg
D:\resources\yezi.jpeg
null