【Java基础复习】IO流(一)

zbhgis 浩瀚地学4163 分钟
创建于 更新于

个人主页:https://github.com/zbhgis

前言

1.之前学过,因此本文是个人复习笔记,为视频的总结以及个人思考,可能不是很详细。

2.教程是b站黑马程序员的JAVASE基础课程,笔记中的大部分图片来自于视频中的PPT截图。

3.Java环境为Java SE 17.0.3.1,IntelliJ IDEA版本为2025.2

https://www.bilibili.com/video/BV1Cv411372m

内容概览

1.本文内容主要包括File类对象的创建,File类的常用api,以及递归实现文件搜索与非空文件夹删除。

2.笔记对应视频152-155节

更新记录

创建时间:2025.10 完成初步撰写

更新1:2026.03 补充目录,并添加个人github主页链接

File类对象创建

File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件或文件夹)

img

Io1.java

Java
package com.zbhgis.io;

import java.io.File;

public class Io1 {
    public static void main(String[] args) {
        // File f1 = new File("E:/AAAfile/gee_bakup/geeapp.js");
        // File f1 = new File("E:\\AAAfile\\gee_bakup\\geeapp.js");
        File f1 = new File("E:" + File.separator + "AAAfile" + File.separator + "gee_bakup" + File.separator + "geeapp.js");
        System.out.println(f1.length());

        File f2 = new File("E:/AAAfile");
        System.out.println(f2.length());

        File f3 = new File("E:/aaa");
        System.out.println(f3.exists());
        System.out.println(f3.length());
    }
}

File的常用api

img img img

Io2.java

Java
package com.zbhgis.io;

import java.io.File;
import java.io.IOException;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;

public class Io2 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("E:/AAAfile/gee_bakup/geeapp.js");

        System.out.println(f1.exists());
        System.out.println(f1.isFile());
        System.out.println(f1.isDirectory());
        System.out.println(f1.getName());
        System.out.println(f1.length() / 1024.0);
        Instant instant = Instant.ofEpochMilli(f1.lastModified());
        System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(instant));
        System.out.println(f1.getPath());
        System.out.println(f1.getAbsolutePath());
        System.out.println(f1.getParent());

        File f2 = new File("E:/AAAfile/gee_bakup/gee_test.js");
        System.out.println(f2.createNewFile());

        File f3 = new File("E:/AAAfile/gee_bakup/aaa/bbb");
        System.out.println(f3.mkdir());

        File f4 = new File("E:/AAAfile/gee_bakup/aaa/bbb");
        System.out.println(f4.mkdirs());

        System.out.println(f2.delete());
        System.out.println(f4.delete());
        File f5 = new File("E:/AAAfile/gee_bakup/");
        System.out.println(f5.delete());
        System.out.println();

        File f6 = new File("E:/AAAfile/gee_bakup/aaa");
        for (String name : f6.list()) {
            System.out.println(name);
        }
        System.out.println();

        for (File file : f6.listFiles()) {
            System.out.println(file.getAbsolutePath());
        }
        System.out.println();

        File f7 = new File("E:/AAAfile/gee_bakup/bbb");
        System.out.println(f7.listFiles());

        File f8 = new File("E:/AAAfile/gee_bakup/ccc");
        System.out.println(Arrays.toString(f8.listFiles()));
    }
}

打印结果

Plain
true
true
false
geeapp.js
10.7001953125
2025-10-19 09:49:07
E:\AAAfile\gee_bakup\geeapp.js
E:\AAAfile\gee_bakup\geeapp.js
E:\AAAfile\gee_bakup
true
true
false
true
true
false

a
aa.txt
b
bb.txt

E:\AAAfile\gee_bakup\aaa\a
E:\AAAfile\gee_bakup\aaa\aa.txt
E:\AAAfile\gee_bakup\aaa\b
E:\AAAfile\gee_bakup\aaa\bb.txt

null
[]

文件搜索与非空文件夹删除

递归实现

从形式上说:方法调用自身的形式称为方法递归。

直接递归:方法自己调用自己

间接递归:方法调用其他方法,其他方法又回调方法自己

Io3.java

Java
package com.zbhgis.io;

import java.io.File;

public class Io3 {
    public static void main(String[] args) {
        searchFile("D:/Program Files/Tencent", "QQ.exe");
        deleteFolder("E:/AAAfile/gee_bakup/ddd");
    }

    public static void searchFile(String dir, String fileName) {
        File path = new File(dir);
        if (path == null || !path.exists() || path.isFile()) {
            return;
        }

        File[] files = path.listFiles();
        if (files != null && files.length > 0) {
            for (File file : files) {
                if (file.isFile()) {
                    if (file.getName().contains(fileName)) {
                        System.out.println(file.getAbsoluteFile());
                    }
                } else {
                    searchFile(String.valueOf(file), fileName);
                }

            }
        }
    }

    public static void deleteFolder(String s) {
        File folder = new File(s);
        if (folder == null || !folder.exists()) {
            return;
        }

        if (folder.isFile()) {
            folder.delete();
            return;
        }

        File[] files = folder.listFiles();
        if (files == null) {
            return;
        }

        for (File file : files) {
            if (file.isFile()) {
                file.delete();
            } else {
                deleteFolder(String.valueOf(file));
            }
        }
        folder.delete();
    }
}

打印结果

Plain
D:\Program Files\Tencent\QQNT\QQ.exe

总结

1.list()方法返回的结果是多个字符串的数组

listFiles()方法返回的结果是多个文件对象的数组

2.listFiles()方法

空文件夹调用返回长度为0的数组

不存在的文件调用返回null

3.在递归实现文件搜索与非空文件夹删除之前,要先确定不同遍历结果中可能出现的非正常值